66. 加一
题目描述: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
直接对数组最后一个元素进行加一操作,判断特殊情况:最后一位是否为9,如果是9的话需要进位,前一位加1;循环计算前一位的数字,判断到第一位的时候,如果第一位大于9则在最前面再加一个数字
//C
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i;
digits[digitsSize - 1] += 1;
for(i = digitsSize - 1; i > 0; i--){
if(digits[i] >= 10) {
digits[i] %= 10;
digits[i - 1] += 1;
}
else
break;
}
if(digits[0] >= 10) {
digits[0] %= 10;
*returnSize = digitsSize + 1;
int *res = (int *)malloc(sizeof(int) * (*returnSize));
res[0] = 1;
digits[0] = 0;
for(i = 0; i < digitsSize; i++) res[i + 1] = digits[i];
return res;
}
else{
*returnSize = digitsSize;
int *res = calloc(*returnSize, sizeof(int));
memcpy(res, digits, sizeof(int) * (*returnSize));
return res;
}
}
//JS
var plusOne = function(digits) {
digits[digits.length - 1]++;
for(var i = digits.length - 1; i > 0; i--){
if(digits[i] >= 10) {
digits[i] %= 10;
digits[i - 1] += 1;
}
else
break;
}
if(i == 0 && digits[i] >= 10) {
digits[i] %= 10;
digits.unshift(1);
}
return digits;
};
使用变量记录每个位置的进位
//C
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i, carry = 0;
int *p = (int *)malloc(sizeof(int) * digitsSize);
for(i = digitsSize - 1; i >= 0; i--){
p[i] = digits[i] + carry;
if(i == digitsSize - 1) p[i] += 1;
if(p[i] == 10) {
p[i] = 0;
carry = 1;
}
else
carry = 0;
}
if(carry == 1) {
*returnSize = digitsSize + 1;
int *q = (int *)malloc(sizeof(int) * (*returnSize));
q[0] = 1;
for(i = 0; i < digitsSize; i++) q[i + 1] = p[i];
return q;
}
else{
*returnSize = digitsSize;
return p;
}
}
//JS
var plusOne = function(digits) {
let tmp = 0;
for(let i = digits.length - 1; i >= 0 ; i--) {
digits[i] += tmp;
if(i == digits.length - 1) digits[i]++;
if(digits[i] >= 10) {
digits[i] = 0;
tmp = 1;
}
else {
tmp = 0;
}
}
if(tmp == 1){
digits.unshift(1);
}
return digits;
};
JS里ES10中的新的基本类型BigInt,它可以兼容大数
//JS
var plusOne = function(digits) {
return (BigInt(digits.join('')) + 1n).toString().split('').map(Number);
};

浙公网安备 33010602011771号