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高

  • 相关阅读:
    在rhel6上安装Python 2.7和Python 3.3
    RHEL7 -- Linux搭建FTP虚拟用户
    RHCE7 -- IPv6
    RHEL7 -- nmcli的使用
    设置Adobe Reader打开PDF文件保持记忆功能
    iptalbes -F
    服务器IP地址后修改SQL Server配置
    配置SELINUX
    11G新特性 -- 分区表和增量统计信息
    11G新特性 -- Statistics Preferences
  • 原文地址:https://www.cnblogs.com/hbhb/p/14312604.html
Copyright © 2011-2022 走看看