题目来源:LintCode
原题地址: http://www.lintcode.com/zh-cn/problem/plus-one/
题目:
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照大小进行排列,最大的数在列表的最前面。
您在真实的面试中是否遇到过这个题?
Yes
样例
给定 [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)
{
int c = 1;
for (int i = digits.size() - 1; i >= 0; i--)
{
digits[i] = digits[i] + c;
c = digits[i]/10;
digits[i] %= 10;
}
if (c > 0)
{
vector<int> temp(digits.size()+1, 0);
temp[0] = c;
for (int i = 1; i < temp.size(); i++)
{
temp[i] = digits[i - 1];
}
return temp;
} else
{
return digits;
}
}
};
代码说明:
变量c 表示进位缓存区,用来存储进位的。
变量c 表示进位缓存区,用来存储进位的。