前言
题目:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
一、示例
二、思路和代码
1.引入库
此解法是适合新手看的,大神可以不看了。
分两大类情况,一类是尾数是9,另外一类不是9
不是9的那一类又分两类,一个是全都是9,另外一个是最高位不是9,尾数是9,但不知道有多少个9
2.代码
代码如下(示例):
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
//加2是因为后面要补0,同时防止999后+1多了一个0
int* ans_arr = (int*)malloc(sizeof(int) * (digitsSize+2));
int i, n = 0;
//如果最后一个不是9
if(digits[digitsSize-1] != 9) {
*returnSize = digitsSize;
ans_arr[digitsSize-1] = digits[digitsSize-1] + 1;
for(i = 0; i < digitsSize-1; i++) {
ans_arr[i] = digits[i];
}
return ans_arr;
} else {
//如果最后一个数是9
//n记录有多少个9
for(i = 0; i < digitsSize; i++) {
if(digits[i] == 9) {
++n;
}
}
//如果全都是9,+1就要变成最高位是1,其余是0 (9...99...999...)
if(n == digitsSize) {
*returnSize = digitsSize+1;
ans_arr[0] = 1;
for(i = 1; i < (digitsSize+1); i++ ) {
ans_arr[i] = 0;
}
return ans_arr;
} else {
//最高位不是9,统计有多少个9,8999...8899..88999...889899........8889...
int a = digitsSize-1;
*returnSize = digitsSize;
while(digits[a] == 9) {
ans_arr[a] = 0;
--a;
}
ans_arr[a] = digits[a] + 1;
for(i = 0; i < a; i++) {
ans_arr[i] = digits[i];
}
return ans_arr;
}
}
return ans_arr;
}
结果如图所示:
总结
尽量不要直接使用参数传来的值,建议定义一个新的变量,然后把参数的值赋值给它