描述:
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照大小进行排列,最大的数在列表的最前面。
样例
给定 [1,2,3]
表示 123, 返回 [1,2,4]
.
给定 [9,9,9]
表示 999, 返回 [1,0,0,0]
.
将一个数字的每个位上的数字分别存到一个一维向量中,最高位在最开头,我们需要给这个数字加一,即在末尾数字加一,如果末尾数字是9,那么则会有进位问题,而如果前面位上的数字仍为9,则需要继续向前进位。具体算法如下:首先判断最后一位是否为9,若不是,直接加一返回,若是,则该位赋0,再继续查前一位,同样的方法,知道查完第一位。如果第一位原本为9,加一后会产生新的一位,那么最后要做的是,查运算完的第一位是否为0,如果是,则在最前头加一个1。
代码如下:
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 n = digits.size();
for (int i = n - 1; i >= 0; --i)
{
if (digits[i] == 9) digits[i] = 0;
else
{
digits[i] += 1;
return digits;
}
}
if (digits.front() == 0) digits.insert(digits.begin(),1);
return digits;
}
};
注:
return:退出函数并返回, 如果函数有返回值,可以将返回值返回
退出本次循环进行下次循环用continue
退出整个循环用break
容易出错的问题:
1.在数组中插入数字用insert而非push
2.数组s的前端表示为s.begin()