20191204更新
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
digits.back() += 1;
for(int i = digits.size()-1; i >= 0; --i){
if(digits[i] / 10 != 0){
if(i > 0){//not the first digit
digits[i-1]++;
digits[i] -= 10;
}else{
digits[i] -= 10;
digits.insert(digits.begin(), 1);
}
}else
break;
}
return digits;
}
};
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
大数加法
笨思路
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len = digits.size();
digits[len-1]++;
for(int i = len-1; i > 0; i--){
if(digits[i] == 10){
digits[i] = 0;
digits[i-1]++;
}
}
if(digits[0] == 10){
digits[0] = 1; //直观的方法就是使用insert()插入
digits.push_back(0);
}
return digits;
}
};
高级一点,9变0,非9加1,返回
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len = digits.size();
for(int i = len-1; i >= 0; i--){
if(digits[i] == 9){
digits[i] = 0;
}
else{
digits[i]++;
return digits;
}
}
digits[0] = 1;
digits.push_back(0);
return digits;
}
};
更具有普遍意义的做法:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len = digits.size();
int c = 1;
for(int i = len-1; i >= 0; i--){
if(c){
int temp = digits[i] + c;
digits[i] = temp % 10;
c = temp / 10;}
else
return digits;
}
if(c)
digits.insert(digits.begin(), 1);
return digits;
}
};
这道题是+1,当求解两个大数相加的结果时,最后的代码参考意义最大