携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
题目描述
原题链接 :
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
提示:
- 1 <= digits.length <= 100
- 0 <= digits[i] <= 9
思路分析
思路上如题,从个位遍历,得到第一个不为9的位数。int not_nine; 初始值为digits.size()-1,在遍历digits的过程中自减,当遇到不为9的数字时则break.
- case1:如果遍历完整个digits数组都没找到不为9的数字(如99),此时not_nine = -1,因此返回的数组res长度为digits.size()+1,除了第1位为1,其他都为0(如100)
- case2:如果遍历digits结束后not_nine = digits.size()-1,即为初始值,代表此时的digits的数组不存在为9的数字(如123),因此将res = digits,并将res的个位加1(如124)
- case3:第一个不为9的数字存在于digits数组中某一位(如899),则将这一位的后面的数重新赋值为0,这一位的数字自加1(如900)
AC 代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
vector<int> res;
if( digits.size() == 0) return res;
// 从个位 计算第一个不为9 的数字,如果i=-1,表示全都是999999.。。
int n=digits.size();
int not_nine;
for( not_nine = n-1; not_nine>=0;)
{
if( digits[not_nine] == 9)
not_nine--;
else
break;
}
if( not_nine == -1)
{
// 99
res = vector<int>(n+1,0);
res[0] = 1;
return res;
}
else if(not_nine == n-1)
{
// 123
res = digits;
res[n-1] += 1;
return res;
}
else
{
// 899 not_nine = 0
res = digits;
res[ not_nine ] += 1;
for( int i = not_nine+1; i< n; i++)
{
res[i] = 0;
}
return res;
}
return res;
}
};