zoukankan      html  css  js  c++  java
  • 加一---简单

    题目:

      给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。

    示例:

      输入: [1,2,3]

      输出: [1,2,4]

      解释: 输入数组表示数字 123。

    思路:

      因为帮过舍友写过长整数的链式加减乘除,所以这道题对我来说不是很难。只要考虑开头和结尾的临界判断写好就可以了,是否要进位通过一个carry_sign标志来实现,一个循环就可以搞定,时间复杂度为O(n),n为数字的长度。

    class Solution {
    public:
        vector<int> plusOne(vector<int>& digits) {
            auto i=digits.end()-1;
            int carry_sign=1;
            if(digits.size()==1&&*i!=9)
            {
                *i+=1;
                return digits;
            }
            for(;i!=digits.begin()&&carry_sign==1;i--)
            {
                if(*i!=9)
                {
                    *i+=1;
                    carry_sign=0;
                }
                else
                {
                    *i=0;
                }
            }
            if(i==digits.begin()&&carry_sign==1&&*i==9)
            {
                *i=0;
                digits.insert(i,1);
            }
            else if(i==digits.begin()&&carry_sign==1)
            {
                *i+=1;
            }
            return digits;
        }
    };

      来看看大佬是怎么解决的把:

    class Solution {
    public:
        vector<int> plusOne(vector<int>& digits) {
            int u=1;
            int t;
            for(int i=digits.size()-1;i>=0;i--){
                int n=digits[i];
                t=(n+u)%10;
                digits[i]=t;
                u=(n+u)/10;
            }
            if (u==1){
                digits.insert(digits.begin(),u);
            }
            return digits;
        }
    };

      解释一下:大佬用一个取余直接得到了某个位数的结果,同时,用u+n/10代表进位,大佬还是巧妙又简洁啊。

  • 相关阅读:
    C#类继承情况下构造函数的执行过程
    vs快捷键大全(分类导航)
    vs常用快捷键
    Entity Framework实体无限循环问题
    entity framework实现left join功能
    理解requireJS-实现一个简单的模块加载器
    petshop4.0(王福朋)
    代码覆盖率工具 Istanbul 入门教程
    .net微信开发
    numpy的用法(一)
  • 原文地址:https://www.cnblogs.com/manch1n/p/10313835.html
Copyright © 2011-2022 走看看