zoukankan      html  css  js  c++  java
  • 43. Multiply Strings (JAVA)

    Given two non-negative integers num1 and num2represented as strings, return the product of num1 and num2, also represented as a string.

    Example 1:

    Input: num1 = "2", num2 = "3"
    Output: "6"

    Example 2:

    Input: num1 = "123", num2 = "456"
    Output: "56088"
    

    Note:

    1. The length of both num1 and num2 is < 110.
    2. Both num1 and num2 contain only digits 0-9.
    3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
    4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

    需要考虑乘积的长度,以及乘积的每一位对应的是乘数中哪两个数字的乘积。

    注意字符串首位出现0的情况,通常情况下至多首位为0,除了一个特殊情况乘数中有0,这样会造成String中多位为0,所以在开头要排除这个可能。

    注意JAVA比较字符串相等必须用equals而不能用==;字符转换成int,除了-'0',还需要强制转换(char);char转成String,也要显示转换,使用String.valueOf

    class Solution {
        public String multiply(String num1, String num2) {
            if(num1.equals("0")|| num2.equals("0")) return "0";
            
            int[] product = new int[num1.length()+num2.length()]; //array to save the product
            int m1;
            int m2;
            int p;
            
            for(int i = product.length-1; i >= 0; i--){ //iterate each bit of the product
                for(int j = num2.length()-1; j>=0; j--){ //iterate each bit of multiplier2
                    if(i-j-1 < 0) continue;
                    if(i-j-1 >= num1.length()) break;
                    m2 = num2.charAt(j)-'0';
                    m1 = num1.charAt(i-j-1)-'0';
                    p = m1*m2;
                    product[i] += p;
                }
            }
            
            //calculate carry
            for(int i = product.length-1; i > 0; i--){
                if(product[i]<10) continue;
                
                product[i-1] += (product[i]/10);
                product[i] %= 10;
            }
            
            //transfrom integer to string
            String result;
            if(product[0] != 0) {
                result = String.valueOf((char) (product[0] + '0'));
            }
            else result = "";
            for(int i = 1; i < product.length; i++){
                result += String.valueOf((char) (product[i] + '0'));
            }
            
            return result;
        }
    }
  • 相关阅读:
    高性能MySQL之锁详解
    采样方法-数据不均衡
    bert中的分词
    中文多分类 BERT
    Transformer+BERT+GPT+GPT2
    GPU下train 模型出现nan
    list 转换成dictionary,并统计词频
    python多个分割符split字符串
    tensorflow中的kernel/Adam 变量的来源
    tensorflow 使用预训练好的模型的一部分参数
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/10818796.html
Copyright © 2011-2022 走看看