• OJ练习17——T66 Plus One


    用单个保存的数字表示一个十进制数,实现+1操作。

    保存的第一个数一定要是有意义的(非零)。

    【思路】

    很容易想到把保存的数字转换为实际十进制数,然后+1,再按原格式保存,但很明显有超范围数据如何表示的问题。

    比如9876543210.(试过用long long类型也放不下?)

    所以要考虑几种情况:

    1.个位数字不是9,直接在个位数+1;

    2.个位数字是9,对于数据位数>1的,从后向前遍历每位数,遇到不是9的就+1,break;

    在此之前是9的就变0。

    如果改变后最大位是0,则最大位变1,再在最后push_back一个0;

    3.如果只有一位数且是9,则变1,0. 这种情况是运行后增加的。开始容易忽略。

    【my code】

    vector<int> plusOne(vector<int>& digits) {
        int n=digits.size();
        if(digits[n-1]!=9)
            digits[n-1]++;
        else
        {
        for(int i=n-1; i>=0; i--){
            if(digits[i]!=9){
                digits[i]++;
                break;
            }
            else
                digits[i]=0;
        }    
        }
        
        if(digits[0]==0){
            digits[0]=1;
            digits.push_back(0);
        }
        if(n==1&&digits[0]==9)
        {
            digits[0]=1;
            digits.push_back(0);
        }
        return digits;
        }

    【other code】

    用另外的vector把原vector反过来保存,再从前向后判断,如果长度增1,就push_back(1)

    vector<int> plusOne(vector<int> &digits) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            vector<int> ret(digits);
            reverse(ret.begin(), ret.end());
            
            int flag = 1;
            for(int i = 0; i < ret.size(); i++)
            {
                ret[i] += flag;
                flag = ret[i] / 10;
                ret[i] %= 10; 
            }
            
            if (flag == 1)
                ret.push_back(1);
            
            reverse(ret.begin(), ret.end());
            
            return ret;
        }

    评价:人家的代码总是很短_(:зゝ∠)_ 不过我的那个循环还是可读性很强的!握拳】

    ps:

    今天做的两道题目都很不顺畅,今天的状态也很不正常╮(╯﹏╰)╭

  • 相关阅读:
    Delphi映射模式实验
    restTemplate工具类
    RestTemplate中几种常见的请求方式
    RestTemplate(一)
    java.util.NoSuchElementException: No value present
    使用jsonRpc进行远程调用的时候com.googlecode.jsonrpc4j.HttpException: stream is closed
    SLF4J: Class path contains multiple SLF4J bindings.警告解决
    如何更改自己博客(博客园的)的背景
    Django中扩展Paginator实现分页
    bootstrap 导航栏
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4431318.html
Copyright © 2020-2023  润新知