JAVA版 《大数乘法》

大数加法

http://www.nowcoder.com/questionTerminal/11ae12e8c6fe48f883cad618c2e81475

思路:

先将两个字符串反转,然后对齐字符串的每一位,怎么个对齐法呢?就是反转后的字符串,短的字符串在最后面补0,补到和长字符串长度一样为止。然后再将字符串的每一位相加,相加时注意每一次都要加上进位数,进位数再前一位可以算出来,当每一位都加完的时候,此时需要一个判断,此时的进位数是否为0,如果不为0.则需要在最后的结果加上它,最后将结果反转回去然后再返回即可。

import java.util.*;
public class Solution {

    public String solve (String s, String t) {
        // write code here
        int ls = s.length();
        int lt = t.length();
        String s1 = reverse(s);
        String t1 = reverse(t);
        int maxLen = ls>lt ? ls:lt;

        if(ls > lt){
            for(int i = lt; i < ls; i++){
                t1 += "0";
            }
        }else{
            for(int i = ls; i < lt; i++){
                s1 += "0";
            }
        }

        StringBuffer res = new StringBuffer(); //存放返回结果
        int ans = 0;  //进位

        for(int i = 0; i < maxLen; i++){
            int sum = Integer.parseInt(s1.charAt(i)+"") + Integer.parseInt(t1.charAt(i)+"")+ans;
            res.append(sum%10);
            ans = sum/10;  //求出进位数
        }
        if(ans > 0){
            res.append(ans);
        }
        return reverse(new String(res));
    }


    //反转字符串
    public String reverse(String str){
        char[] chars = str.toCharArray();
        int l = 0, r = chars.length-1;
        while(l < r){
            char c = chars[l];
            chars[l] = chars[r];
            chars[r] = c;
            l++;
            r--;
        }
        return new String(chars);
    }
}






全部评论
你的太复杂了吧,看看我的 import java.util.*; public class Solution { public String solve (String s, String t) { if(s==null||"".equals(s))return t; if(t==null||"".equals(t))return s; int i=s.length()-1,j=t.length()-1; StringBuilder ans=new StringBuilder(); int c=0; while(i>=0||j>=0){ int c1=(i>=0?s.charAt(i)-'0':0); int c2=(j>=0?t.charAt(j)-'0':0); ans.append((c+c1+c2)%10); c=(c1+c2+c)/10; i--; j--; } if(c!=0) ans.append(c); ans.reverse(); return ans.toString(); } }
1 回复 分享
发布于 2021-03-13 12:57

相关推荐

自从我室友在计算机导论课上听说了“刷&nbsp;LeetCode&nbsp;是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在&nbsp;DP,请勿打扰,否则&nbsp;Time&nbsp;Limit&nbsp;Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk&nbsp;is&nbsp;cheap.&nbsp;Show&nbsp;me&nbsp;the&nbsp;code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j]&nbsp;代表第&nbsp;i&nbsp;个人坐在第&nbsp;j&nbsp;个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target&nbsp;node),我应该用&nbsp;BFS&nbsp;还是&nbsp;DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点&nbsp;(x,&nbsp;y),我们俩的路径有&nbsp;k&nbsp;个交点,为了最小化时间复杂度,应该在&nbsp;(x/2,&nbsp;y/2)&nbsp;处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是&nbsp;O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到&nbsp;O(log&nbsp;n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你&nbsp;Two&nbsp;Sum&nbsp;刷了几遍了?”“别提了,昨天遇到一道&nbsp;Hard&nbsp;题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode&nbsp;真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
13
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务