美文网首页
leetcode算法—[415][2][67]大数相加系列问题

leetcode算法—[415][2][67]大数相加系列问题

作者: 小胖学编程 | 来源:发表于2021-07-11 09:31 被阅读0次

有一类型的题目是模拟数学运算,完成二进制、十进制、十六进制的转换。关键算法在于取余和除两个数学操作的运用。

1. 相似题型

1.1 大数相加

415. 字符串相加

image.png

1.2 整数反转

leetcode算法—整数反转(简单)

1.3 二进制求和

67. 二进制求和

image.png

2. 总结

核心算法在于:
进位值=(两个字符串的最后一位相加+进位值)/对应进位;
本位值=(两个字符串的最后一位相加+进位值)%对应进位;

算法比较简单,说一下自己的bug:

1. 两个字符串长度不同

例如100 和 10相加,最终的值为110。即个位+个位,十位+十位。
反应在编程中是:字符串对应的末尾相加

但是我开始的思路:第一个for循环处理两个字符串的公共部分,长的字符串多出来的一部分在使用一个for循环处理。
遇到的问题:循环的边界情况复杂,且这样实现代码逻辑复杂。

然后转变思路,当方法进入后,便使用一个循环进行对短字符串补0操作,直至两个字符串长度相等。然后在使用一个for循环完成除和取余的操作
不足之处:代码不够简洁,可以仅使用一个for循环完成操作;

但是两个字符串长度并不相同,如何使用一个循环来控制两个字符串中字符值的获取?

再次转变思路,使用一个for循环进行处理时,两个字符串的末尾字符的位置并不相同。for循环次数的作用便仅仅控制两个字符串相加多少次。而获取字符串对应的字符位置,需要单独处理。

循环结束后,多于的进位没有处理

比如99+10,循环计算两次,得到的值为09,进位1还没有进行拼接,所以在最终返回时,要判断进位是否为0,然后在做最终处理返回。

3. 最终代码

class Solution {

    /**
     * 09:00    info
     * 解答成功:
     * 执行耗时:15 ms,击败了5.76% 的Java用户
     * 内存消耗:39.1 MB,击败了5.04% 的Java用户
     */
    public String addStrings(String num1, String num2) {
        char[] nc1 = num1.toCharArray();
        char[] nc2 = num2.toCharArray();
        //遍历-低位相加
        //获取到最大遍历个数

        //最大遍历的次数
        int max = nc1.length > nc2.length ? nc1.length : nc2.length;
        //两个集合分别遍历的开始位置
        int nl1 = nc1.length - 1;
        int nl2 = nc2.length - 1;

        //进位
        int h = 0;
        String r = "";
        for (int i = max - 1; i >= 0; i--) {
            //分别获取两个字符数组的最后一位
            int ni1 = nl1 < 0 ? 0 : Integer.valueOf(nc1[nl1] + "");
            int ni2 = nl2 < 0 ? 0 : Integer.valueOf(nc2[nl2] + "");

            int sum = ni1 + ni2 + h;

            h = sum / 10;
            r = sum % 10 + r;
            nl1--;
            nl2--;
        }
        //最后可能依旧存在进位
        return h != 0 ? h + r : r;

    }
}

相关文章

  • leetcode算法—[415][2][67]大数相加系列问题

    有一类型的题目是模拟数学运算,完成二进制、十进制、十六进制的转换。关键算法在于取余和除两个数学操作的运用。 1. ...

  • LeetCode-415-字符串相加

    LeetCode-415-字符串相加 415. 字符串相加[https://leetcode-cn.com/pro...

  • LeetCode 415. 字符串相加 | Python

    415. 字符串相加 题目来源:力扣(LeetCode)https://leetcode-cn.com/probl...

  • 20181125_ARTS_W8

    Algorithm(至少一个算法题) 415. Add Strings题目描述:两个用字符串表示的大数相加解题思路...

  • Swap Nodes in Pairs

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Swap Nodes in ...

  • Combination Sum II

    标签: C++ 算法 LeetCode DFS 每日算法——leetcode系列 问题 Combinatio...

  • Divide Two Integers

    标签: C++ 算法 LeetCode 每日算法——leetcode系列 问题 Divide Two Integ...

  • First Missing Positive

    标签: C++ 算法 LeetCode 数组 每日算法——leetcode系列 问题 First Missing...

  • Valid Sudoku

    Valid Sudoku 标签: C++ 算法 LeetCode 每日算法——leetcode系列 问题 Val...

  • Next Permutation

    标签: C++ 算法 LeetCode 数组 每日算法——leetcode系列 问题 Next Permuta...

网友评论

      本文标题:leetcode算法—[415][2][67]大数相加系列问题

      本文链接:https://www.haomeiwen.com/subject/eqckpltx.html