66.Plus One
一、问题描述
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
二、输入输出
三、解题思路
- 能吐槽下题没读懂么 &&^*
- 题目的意思是有个正数,每一位都被存到了数组里,现在要让这个数+1,然后输出结果,同样是以数组的形式
- 思路1:可以先把这个正数真的转换成正数,不在是数组。有个点需要注意,数组的长度不用很长10几位,int这个类型就不够用了,可能需要
long long
甚至是unsigned long long
。这并不是个好办法,最好的办法是依旧在数组上进行修改。 - 思路2:一看到这种用数组表示数的,首先考虑在原来的基础上进行修改。多半这个数非常大;从低位到高位来遍历,如果是9 那么就改为0 ,高位需要进1(也就是加1)。一直这样遍历下去,遇到第一个不为9的直接给他加1即可;如果超过了数组长度都没遇到不为9的,说明最高位需要进位,所以要在vector.begin()插入一个1
vector<int> plusOne(vector<int>& digits) {
int i = digits.size() - 1;
while(i >= 0){
if( digits[i] == 9){
digits[i] = 0;
i--;
}else{
digits[i]++;
return digits;
}
}
digits.insert(digits.begin(), 1);
return digits;
}