leetcode989.数组形式的整数加法

先看题目描述:
对于非负整数 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

class Solution {
    public List<Integer> addToArrayForm(int[] A, int K) {
        int num=0;	//存放运算结果
        int len=A.length;	//获取数组长度
        int value;
        int a;		//存储中间量
        for(int i=0;i<A.length;i++){
            len=len-1;	//循环一次,长度减一
            a=(int) Math.pow(10,len);	//计算10的len次幂,存放在a中
            value=(A[i]*a);		//获取A数组中i下标的值
            num=num+value;		//将数组转化为数值
        }
        num=num+K;		//进行计算
        String s=num+"";	//转化为String类型的值
        List list = new ArrayList();
        int c;
        for(int i=0;i<s.length();i++){
            char b = s.charAt(i);	//取出i下标的数字转化为char类型
        	c = b - '0';	//将char转化为int
            list.add(c);	//添加到集合中
        }
        return list;
    }
}

注意:此方法看似很美好(当初我也是这么想的),但在测试时系统会无限制加大输入数组值,在我将类型转化为long时系统接着会让数组的值突破天际,直到溢出。。。。。。看来他们不喜欢这种方法。。。

来看一个通用的解决方案:

class Solution {
    public static List<Integer> addToArrayForm(int[] A, int K) {
        int carry = K;
        for(int i=A.length-1;i>=0;i--){
            int tmp = A[i] + carry;		//从后往前取出对应位数值做加法运算
            carry = tmp/10;		//设置溢出位
            A[i] = tmp%10;		//将加法运算结果对应位存回数组
        }

        List<Integer> results = new ArrayList<>();
        while(carry>0){		//若运算完毕后carry位数大于A的位数
            results.add(0,carry%10);	//取每一位的余数加在list的首位
            carry = carry/10;		
        }

        for(int a:A){
            results.add(a);		//将数组存入list
        }

        return results;
    }
}

此方法相当于一直在数组中做运算,避免了数值过大的溢出问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值