LeetCode#43. Multiply Strings

来源:互联网 发布:哈登15 16赛季数据 编辑:程序博客网 时间:2024/04/27 00:25
  • 题目:给定两个整型的数用string表示: num1 num2,求num1和num2的乘积

  • 思路:从低位到高位,num1与num2的每一位相乘,总共需要进行len1轮乘法;

  • 难度:Medium

  • 代码:

public class Solution {    //计算两个数的乘积    public String multiply(String num1, String num2) {        if(num1.length() == 0 || num2.length() == 0 || num1 == null || num2 == null){            return "";        }        //如果num1或num2为空,则直接返回“0”        if(num1.equals("0") || num2.equals("0")){            return "0";        }        StringBuilder resultStr = new StringBuilder("");        int len1 = num1.length();        int len2 = num2.length();        int[] result = new int[len1+len2];        int k = len1;        while(k > 0){            int carry = 0;            for(int i = len2-1; i >= 0; i--){                int temp =  Character.getNumericValue(num1.charAt(k-1)) * Character.getNumericValue(num2.charAt(i)) + carry;                carry = (result[i+k]+temp)/10;                result[i+k] = (result[i+k] + temp)%10;            }            k--;            result[k] = result[k] + carry;//每一轮乘完可能需要进位,这一行代码就是存进位的值        }        //去掉最高位为0        int j = 0;        if(result[0] == 0){            j = 1;        }        for(int i = j; i < len1+len2; i++){            resultStr.append(result[i]);            System.out.print(result[i]);        }        //return Arrays.toString(result);        return resultStr.toString();    }}
  • 来自Discuss里的解法(超级机智好吗!!!)
public String multiply(String num1, String num2) {    int m = num1.length(), n = num2.length();    int[] pos = new int[m + n];    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');             int p1 = i + j, p2 = i + j + 1;            int sum = mul + pos[p2];            pos[p1] += sum / 10;            pos[p2] = (sum) % 10;        }    }      StringBuilder sb = new StringBuilder();    //if里的判断就可以把高位0都去掉    for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);    return sb.length() == 0 ? "0" : sb.toString();}

总结Java中char转int的两种方法

1. int value = Character.getNumericValue(char c)2. int value = c - '0'

总结数组转成string[1, 3, 5]

1. StringBuilder.append() + 数组遍历(string结果为:135)2. Arrays.toString(arr) (输出结果:[1, 3, 5])注意以上两种方法输出结果的不同!!!!!
0 0
原创粉丝点击