资讯专栏INFORMATION COLUMN

43. Multiply Strings

fsmStudy / 602人阅读

摘要:是最高位代表进位,表示本位。就是本位的乘积加上本位已有的值。进位就是除以的余数本位就是剩下的个位数。

43 Multiply Strings

关键词,进位。

public class Solution {
    public String multiply(String num1, String num2) {
        int m = num1.length(), n = num2.length();
        int[] pos = new int[m + n]; // 0是最高位
       
        for(int i = m - 1; i >= 0; i--) {
            for(int j = n - 1; j >= 0; j--) {
                int mul = (num1.charAt(i) - "0") * (num2.charAt(j) - "0"); 
                // p1代表进位, p2表示本位。
                int p1 = i + j, p2 = i + j + 1;
                // sum 就是本位的乘积加上本位已有的值。
                int sum = mul + pos[p2];
                // 进位就是除以10的余数
                pos[p1] += sum / 10;
                // 本位就是剩下的个位数。
                pos[p2] = (sum) % 10;
            }
        }  
        
        StringBuilder sb = new StringBuilder();
        for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);
        return sb.length() == 0 ? "0" : sb.toString();
    }
}

67 Add Binary

public class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        
        char[] cha = a.toCharArray();
        char[] chb = b.toCharArray();
        int i = cha.length-1, j = chb.length -1, carry = 0;
        
        while(i >=0 || j>=0) {
            int vala = i >= 0 ? cha[i--] - "0" : 0;
            int valb = j >= 0 ? chb[j--] - "0" : 0;
            int cur = vala+ valb + carry;
            sb.append(cur%2);
            carry = cur/2;
        }
        if(carry == 1) sb.append(1);
        return sb.reverse().toString();
    }
}

415 Add Strings

public class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        
        for(int i = num1.length() -1, j = num2.length()-1, carry = 0; i >= 0 || j >= 0 || carry == 1; i--, j--){
            int x = i < 0 ? 0 : num1.charAt(i) - "0";
            int y = j < 0 ? 0 : num2.charAt(j) - "0";
            sb.append((x+y+carry)%10);
            carry = (x+y+carry)/10;
        }
        
        return sb.reverse().toString();
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66993.html

相关文章

  • leetcode 43 Multiply Strings

    摘要:题目详情题目要求输入两个以字符串形式表示的正整数,要求我们求出它们的乘积,同样也是字符串形式表示。要求不能直接将字符串转换为整数进行乘法运算。想法这道题的思路就是将我们平时手算多位数乘法的计算方法,转换成程序语言。 题目详情 Given two non-negative integers num1 and num2 represented as strings, return the ...

    cloud 评论0 收藏0
  • leetcode43 multiply strings

    摘要:题目要求将两个形式的数字相乘的结果用的形式返回。不准使用以外的形式来记录数字。假设,则将结果的十位和个位分别放在数组下标为和的位置上。存储的位置等同于上一思路。然后再通过一轮遍历将进位处理一下。 题目要求 Given two non-negative integers num1 and num2 represented as strings, return the product of...

    Batkid 评论0 收藏0
  • [Leetcode] Multiply String and Big Interger 大数乘法加法

    摘要:因为被乘数每一位数字和乘数相乘的结果是依次错开的,所以就没问题。判断两个数的大小的方法,是先判断其长度,如果长度不一样,则较长的较大,如果长度一样,则需要比较每一位。 Multiply Strings Given two numbers represented as strings, return multiplication of the numbers as a string. ...

    keithxiaoy 评论0 收藏0
  • leetcode 部分解答索引(持续更新~)

    摘要:前言从开始写相关的博客到现在也蛮多篇了。而且当时也没有按顺序写现在翻起来觉得蛮乱的。可能大家看着也非常不方便。所以在这里做个索引嘻嘻。顺序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 从开始写leetcode相关的博客到现在也蛮多篇了。而且当时也没有按顺序写~现在翻起来觉得蛮乱的。可能大家看着也非常不方便。所以在这里做个索引嘻嘻。 顺序整理 1~50 1...

    leo108 评论0 收藏0
  • threejs中矩阵旋转原理

    摘要:如创建一个的矩阵将上面创建的矩阵按照传入的轴旋转传入的弧度旋转轴,旋转弧度原型上的方法值为值为初始值为执行之后的值为将按照旋转轴和弧度旋转完成的矩阵和几何体的矩阵相乘框架源码这里的是因为只传入一个值和是全等的 矩阵的概念 threejs中的矩阵 矩阵的应用 用于旋转一个几何体 创建一个立方体cube放到场景中; showImg(https://segmentfault.com/img/...

    gyl_coder 评论0 收藏0

发表评论

0条评论

fsmStudy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<