欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

刷题 加一

程序员文章站 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;
}

上一篇: 慢查询日志

下一篇: 算法题3-加一