题目二十七:
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照数位高低进行排列,最高位的数在列表的最前面。
样例
给定 [1,2,3]
表示 123, 返回 [1,2,4]
.
给定 [9,9,9]
表示 999, 返回 [1,0,0,0]
.
代码:
class Solution {
public:
/**
* @param digits: a number represented as an array of digits
* @return: the result
*/
vector<int> plusOne(vector<int> &digits) {
// write your code here
int size = digits.size()-1;
int a,i;
if(digits[size]+1<10)
{
digits[size] = digits[size] + 1;
return digits;
}
else
{
a=1;
digits[size] = (digits[size]+a)%10;//进位
for(i=size-1;i>=0;i--)
{
if(digits[i]+a<10)
{
digits[i] = digits[i] + a;
a=0;
break;
}
else
{
a = 1;
digits[i] = (digits[i]+a)%10;//进位
}
}
if(a==1)//最高位有进位
{
digits.insert(digits.begin(),1);
}
return digits;
}
}
};
思路:可以参照加法进位,末位加一,从倒数第二位起,每一位数等于本位数加前一位进位,在确定本位数前要判断加和是否需要进位,如果需要进位,则a=1;
digits[i] = (digits[i]+a)%10; 继续循环,否则跳出循环。
注意判断最高位运算结束后是否会产生进位,如果产生进位则把1插入数组起始位置。