刷题 加一
程序员文章站
2024-03-23 15:50:40
...
主要难点是进一操作
我的解法:几次循环操作,检测尺寸小时加尺寸
vector<int> plusOne(vector<int>& digits) {
digits.back()++;
if (digits.back()/10==1){
digits.back()=0;
if(digits.size()<2)
{
digits.insert(digits.begin(),0);
}
digits[digits.size()-2]++;
for(int i=2;i<digits.size()+1;i++)
{
if (digits[digits.size()-i]/10==1)
{
digits[digits.size()-i]=0;
if(digits.size()<=i)
digits.insert(digits.begin(),0);
digits[digits.size()-i-1]++;
}
else break;
}
}
return digits;
}
解法一:如果是10就一直加下去,如果最后一次加依旧是10,则做尺寸扩张操作
vector<int> plusOne(vector<int>& digits) {
int flag=1;
for(int i=digits.size()-1;i>-1;i--){
digits[i]=digits[i]+flag;
flag=0;
if(digits[i]==10){
digits[i]=0;
flag=1;
}
else
break;
}
if(flag==1){
vector<int> ans(digits.size()+1);
ans[0]=1;
for(int i=1;i<ans.size();i++){
ans[i]=digits[i-1];
}
return ans;
}
return digits;
}
解法二:(最好的)先从后向前消灭连续的会进一的9,如果i<0说明是全9,要改变尺寸
vector<int> plusOne(vector<int>& digits) {
int i = digits.size() - 1;
while (digits[i] == 9 && i>=0) {
digits[i--] = 0; };
if (i < 0) {
digits[0] = 1;
digits.push_back(0);
} else {
digits[i]++;
}
return digits;
}