• Leetcode 989数组形式的整数加法


    题目定义:

    对于非负整数 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
    
    

    方式一(多个参数保存对应的值):

    class Solution {
        public List<Integer> addToArrayForm(int[] A, int K) {
            LinkedList<Integer> ans = new LinkedList<>();
            //mod 和length 保存 K和A的遍历顺序,next保存进位,value保存遍历时的值
            int mod = 10, length = A.length - 1, next = 0, value;
            while (K > 0 && length >= 0) {
                value = A[length] + (K % mod) + next;
                K /= mod;
                length--;
                next = value / 10;
                value = value % 10;
                ans.addFirst(value);
            }
            while (K > 0) {
                value = K % mod + next;
                K /= mod;
                next = value / 10;
                value = value % 10;
                ans.addFirst(value);
            }
            while (length >= 0) {
                value = A[length] + next;
                length--;
                next = value / 10;
                value = value % 10;
                ans.addFirst(value);
            }
            if(next > 0){
                ans.addFirst(next);
            }
            return ans;
        }
    
    }
    

    方式二(逐位相加):

    class Solution {
        public List<Integer> addToArrayForm(int[] A, int K) {
            LinkedList<Integer> ans = new LinkedList<>();
            for(int i = A.length - 1; i >= 0; i--){
                int value = A[i] + K % 10;
                K /= 10;
                if(value >= 10){
                    K ++;
                    value -= 10;
                }
                ans.addFirst(value);
            }
            for(; K > 0; K /= 10){
                ans.addFirst(K % 10);
            }
            return ans;
        }
    }
    

    方式三(整个加数 K 加入数组表示的数的最低位):

    class Solution {
        public List<Integer> addToArrayForm(int[] A, int K) {
            LinkedList<Integer> ans = new LinkedList<>();
            for(int i = A.length - 1; i >= 0 || K > 0; i--,K /= 10){
                if(i >= 0)
                    K += A[i];
                ans.addFirst(K % 10);
            }
            return ans;
        }
    }
    

    参考:

  • 相关阅读:
    【XSY2534】【CF835D】Palindromic characteristics 回文自动机
    启发式合并&线段树合并/分裂&treap合并&splay合并
    【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
    线性求逆元
    l1 和l2范数的真实意义
    方向导数及梯度
    大厂实习总结和反思
    高考报考以及心态调整健康贴士
    【骑士走棋盘】
    【老鼠走迷宫一】
  • 原文地址:https://www.cnblogs.com/CodingXu-jie/p/14312029.html
Copyright © 2020-2023  润新知