• 989. 数组形式的整数加法『简单』


    题目来源于力扣(LeetCode

    一、题目

    989. 数组形式的整数加法

    题目相关标签:数组

    提示:

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

    二、解题思路

    2.1 数字相加

    1. 定义变量 carry 记录计算结果是否大于等于 10,即需要进位的数值

    2. 当数组 A 未遍历完或者数字 K 不为 0 时,循环操作

      数组为倒序遍历

    3. 每次对数组的末位与 K 的低位进行相加操作

      注意:和大于 10 时,需要进位,添加的元素为取 10 的余数

    4. 最终结果为 list 列表元素反转

    2.2 链表

    1. 利用 LinkedList API 的 addFirst() 方法添加元素到链表首位

    2. 数组 A 未遍历完或者数字 K 不为 0 时,循环操作

      数组为倒序遍历

    3. 数字 K 每次加上数组的末位

    4. 每次往链表首位添加元素 K % 10,并对 K 进行除 10 操作,即舍掉最后一位

    三、代码实现

    3.1 数字相加

    public static List<Integer> addToArrayForm(int[] A, int K) {
        List<Integer> list = new ArrayList<>();
        int carry = 0;  // 记录进位
        int len = A.length - 1;
    
        while (len >= 0 || K != 0) {
            int sum = 0;
            if (len >= 0) {
                sum += A[len];
                len--;
            }
            sum += K % 10 + carry;
            carry = sum / 10;
            list.add(sum % 10);
            K /= 10;
        }
    
        if (carry == 1) {
            list.add(carry);
        }
        Collections.reverse(list);
        return list;
    }
    

    3.2 链表

    public static List<Integer> addToArrayForm(int[] A, int K) {
        LinkedList<Integer> list = new LinkedList<>();
        int len = A.length - 1;
        int lastNum = K;
    
        while (len >= 0 || lastNum != 0) {
            if (len >= 0) {
                lastNum += A[len--];
            }
            // 往链表首位添加元素
            list.addFirst(lastNum % 10);
            lastNum /= 10;
        }
        return list;
    }
    

    四、执行用时

    4.1 数字相加

    4.2 链表

    五、部分测试用例

    public static void main(String[] args) {
        int[] A = {1, 2, 0, 0};
        int K = 34;  // output: {1, 2, 3, 4}
    
    //    int[] A = {2, 7, 4};
    //    int K = 181;  // output: {4, 5, 5}
    
    //    int[] A = {2, 1, 5};
    //    int K = 806;  // output: {1, 0, 2, 1}
    
    //    int[] A = {9, 9, 9, 9, 9, 9, 9, 9, 9, 9};
    //    int K = 1;  // output: {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    
        List<Integer> result = addToArrayForm(A, K);
        System.out.println(result);
    }
    
  • 相关阅读:
    UVALive2678子序列
    UVA11549计算机谜题
    UVA11520填充正方形
    LA3635派
    UVALive3971组装电脑
    记录未完成题目
    SPOJ 6219 Edit distance字符串间编辑距离
    ACM组队安排-——杭电校赛(递推)
    逆袭指数-——杭电校赛(dfs)
    油菜花王国——杭电校赛(并查集)
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/13178955.html
Copyright © 2020-2023  润新知