zoukankan      html  css  js  c++  java
  • 20210122 数组形式的整数加法

    对于非负整数 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
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    
    public List<Integer> addToArrayForm(int[] A, int K) {
    
        }

    思路1: int[]转string再转int计算  按之前刷题的经验首先想到转Integer有长度限制 

        这个思路先排除

    思路2:入参K%10 分别按位取出数余 如34取到3和4 再把取到的值加到数组对应的位置上 进位+1

      (写代码时遇到了几次提交失败

         1)没考虑到最后一位有进位时没有插入

          list.add(0,jw)

         2)K长度个数若远大于int个数 得重新遍历K到list中

        if (K>0){...

       public static List<Integer> addToArrayForm1(int[] A, int K) {
           int Alen=A.length;
           int K1;//余数
            List<Integer> list =new ArrayList<Integer>(Alen);
            int jw=0;//进一位
            for (int i=0;i<Alen;i++){
                K1=K%10;
                K/=10;
                list.add((A[Alen-1-i]+K1+jw)%10);//进位后再取余 防止大于等于10的情况出现
                jw=(A[Alen-1-i]+K1+jw)>9?1:0;//下个值是否进一位
            }
    //K位数大于数组时
            if (K>0){
                int klen=String.valueOf(K).length();
                for (int i=0;i<klen;i++){
                    K1=K%10;
                    K/=10;
                    list.add((K1+jw)%10);
                    jw=K1+jw>9?1:0;
                }
            }
           Collections.reverse(list);//也考虑过不用翻转 但这样做的话list得定义个初始值不太直观
           if (jw>0) list.add(0,jw);//在最后还需进位的话在list左边插入1
           return list;
        }

    思路3:按思路1改进 Integer最大2147483647 长度10位 int[]转字符串后先判断长度 小于10位长度按思路1走 大于10位则切割成多个长度9位的数组 分开计算 计算也得考虑前一个数组是否进位  

    这个思路的效率应该会比思路2高

  • 相关阅读:
    POJ 1149 PIGS(Dinic最大流)
    HDU 4514 湫湫系列故事——设计风景线(并查集+树形DP)
    [kuangbin带你飞]专题十一 网络流个人题解(L题留坑)
    BZOJ 3931 网络吞吐量(最短路+拆点最大流)
    学习RMQ-ST表
    `这个符号在mysql中的作用
    用一条mysql语句插入多条数据
    Leetcode 257 Binary Tree Paths 二叉树 DFS
    Leetcode 203 Remove Linked List Elements 链表
    Leetcode 38 Count and Say 传说中的递推
  • 原文地址:https://www.cnblogs.com/hbhb/p/14312604.html
Copyright © 2011-2022 走看看