zoukankan      html  css  js  c++  java
  • 力扣(LeetCode)整数形式的整数加法 个人题解

    对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]

    给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

    示例 1:

    输入:A = [1,2,0,0], K = 34
    输出:[1,2,3,4]
    解释:1200 + 34 = 1234
    

    解释 2:

    输入:A = [2,7,4], K = 181
    输出:[4,5,5]
    解释:274 + 181 = 455
    

    示例 3:

    输入:A = [2,1,5], K = 806
    输出:[1,0,2,1]
    解释:215 + 806 = 1021
    

    示例 4:

    输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
    输出:[1,0,0,0,0,0,0,0,0,0,0]
    解释:9999999999 + 1 = 10000000000
    

    提示:

    1. 1 <= A.length <= 10000
    2. 0 <= A[i] <= 9
    3. 0 <= K <= 10000
    4. 如果 A.length > 1,那么 A[0] != 0

    这题做法的思路是比较简单的,逐位相加,记得设置进位,从右到左最后得到结果。

    我这里使用了原地的vector来做,所以内存使用上比较少,但是逻辑判断就比较麻烦一些了。如果K的位数大于数组的位数还得再进行处理。

    代码如下:

    class Solution {
    public:
        vector<int> addToArrayForm(vector<int>& A, int K) {
            int cf=0;
            for(int i=A.size()-1; i>=0; i--) {
                int tmp=K%10;
                int newnum = tmp+A[i]+cf;
                if(newnum >= 10) {
                    newnum-=10;
                    cf=1;
                } else {
                    cf=0;
                }
                A[i]= newnum;
                K/=10;
            }
            while (K!=0) {
                A.insert(A.begin(),K+cf);
                cf = (K+cf)/10;
                K/=10;
            }
            if (cf!=0)
                A.insert(A.begin(),cf);
            return A;
        }
    };

     多说一句,题解区有更巧的方法,但是思路本质是一样的 戳->https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/shu-zu-xing-shi-de-zheng-shu-jia-fa-by-leetcode/

  • 相关阅读:
    【深入理解jvm笔记】Java发展史以及jdk各个版本的功能
    老罗Android视频教程(第一版)
    微软平台开发
    asp.net mvc 小结
    JavaScript代码段
    CSS代码片段
    c#代码片段
    Windows Phone 链接
    HttpRequest
    Win32
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/10834978.html
Copyright © 2011-2022 走看看