43. Multiply Strings

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();
    }
}

你的code
记录日常刷leetcode的思路和总结。

你的code是面向面试编程的,收集和整理leetcode discussion里个人认为的最优且最符合我个人思维逻辑的解...

12 声望
4 粉丝
0 条评论
推荐阅读
287. Find the Duplicate Number
{代码...} {代码...}

大米中的大米阅读 1.2k

Java12的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft63阅读 11.9k

Java8的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft32阅读 24.7k评论 1

一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目,提交PR,提高竞争力。早日上岸,升职加薪。知识点详解秒杀系统架构图秒杀流程图秒杀系统设计这篇文章一万多...

王中阳Go34阅读 2.6k评论 1

封面图
Java11的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft28阅读 15.4k评论 3

Java5的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft13阅读 20.5k

Java9的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft20阅读 14.6k

你的code是面向面试编程的,收集和整理leetcode discussion里个人认为的最优且最符合我个人思维逻辑的解...

12 声望
4 粉丝
宣传栏