66. Plus one

#include <stdlib.h>
#include <string.h>

int *plusOne(int *digits, int digitsSize, int *returnSize) {
  int *res = malloc(sizeof(int) * (digitsSize + 1));
  memcpy(res + 1, digits, sizeof(int) * digitsSize);

  for (int i = digitsSize; i >= 1; i--) {
    if (res[i] < 9) {
      res[i]++;
      *returnSize = digitsSize;
      memmove(res, res + 1, sizeof(int) * digitsSize);
      return res;
    }
    res[i] = 0;
  }
  res[0] = 1;
  *returnSize = digitsSize + 1;
  return res;
}
#include <vector>

using namespace std;

class Solution {
public:
  vector<int> plusOne(vector<int> &digits) {
    for (int i = digits.size() - 1; i >= 0; i--) {
      if (digits[i] < 9) {
        digits[i]++;
        return digits;
      }
      digits[i] = 0;
    }
    digits.insert(digits.begin(), 1);
    return digits;
  }
};
package mathgeometry

func plusOne(digits []int) []int {
    for i := len(digits) - 1; i >= 0; i-- {
        if digits[i] < 9 {
            digits[i]++
            return digits
        }
        digits[i] = 0
    }
    return append([]int{1}, digits...)
}
class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        int[] res = new int[digits.length + 1]; // the rest is already all zeros
        res[0] = 1;
        return res;
    }
}
/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
  for (let i = digits.length - 1; i >= 0; i--) {
    if (digits[i] < 9) {
      digits[i]++;
      return digits;
    }
    digits[i] = 0;
  }
  digits.unshift(1);
  return digits;
};
from typing import List


class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for i in range(len(digits) - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        return [1] + digits
impl Solution {
    pub fn plus_one(mut digits: Vec<i32>) -> Vec<i32> {
        for d in digits.iter_mut().rev() {
            if *d < 9 {
                *d += 1;
                return digits;
            }
            *d = 0;
        }
        digits.insert(0, 1);
        digits
    }
}