zoukankan      html  css  js  c++  java
  • LeetCode66:加一

    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

    最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

    你可以假设除了整数 0 之外,这个整数不会以零开头。

    示例 1:

    输入: [1,2,3]
    输出: [1,2,4]
    解释: 输入数组表示数字 123。
    示例 2:

    输入: [4,3,2,1]
    输出: [4,3,2,2]
    解释: 输入数组表示数字 4321。

    简单做法是直接从后向前循环,不断加1,如果最后最高位仍需要进位,就复制整个数组到新的空间中。

     1 class Solution {
     2 public:
     3     vector<int> plusOne(vector<int>& digits) {
     4         int n=digits.size();
     5         int forward=0;
     6         digits[n-1]+=1;
     7         if(digits[n-1]==10){
     8             digits[n-1]=0;
     9             forward=1;
    10         }
    11         for(auto it=digits.rbegin()+1;it!=digits.rend();it++){
    12             if(forward==0) break;
    13             *it+=forward;
    14             if(*it==10) *it=0;
    15             else forward=0;
    16         }
    17         if(forward==1){
    18             vector<int> ret;
    19             ret.push_back(1);
    20             for(auto it=digits.begin();it!=digits.end();it++)
    21                 ret.push_back(*it);
    22             return ret;
    23         }
    24         return digits;
    25     }
    26 };

    这里其实可以直接反向循环的时候压入到新数组,最后再压入头部的1,可以用reverse(ret.begin(),ret.end())反转数组。

    附上一个很机智的方法:

     1 class Solution {
     2 public:
     3     vector<int> plusOne(vector<int>& digits) {
     4         int n=digits.size();
     5         for(int i=n-1;i>=0;--i){
     6             if(digits[i]==9){
     7                 digits[i]=0;
     8             }
     9             else{
    10                 digits[i]+=1;
    11                 break;
    12             }
    13         }
    14         if(digits[0]==0){
    15             digits[0]=1;
    16             digits.push_back(0);
    17         }
    18         return digits;
    19     }
    20 };
    21 
    22 作者:hwhu2020
    23 链接:https://leetcode-cn.com/problems/plus-one/solution/c-jian-ji-dai-ma-ni-xu-bian-li-yuan-shu-zu-shuang-/
    24 来源:力扣(LeetCode)
    25 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    可以知道只有在全部位都为9的情况下首部才会进位,这样+1操作后全部位都为0,再把首位改为1,最后压入一个0就可以了。

  • 相关阅读:
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    2013551822第一次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/rookiez/p/13214601.html
Copyright © 2011-2022 走看看