zoukankan      html  css  js  c++  java
  • Leetcode Multiply Strings

    Given two numbers represented as strings, return multiplication of the numbers as a string.

    Note: The numbers can be arbitrarily large and are non-negative.


    解题思路:

    没想出来,看的答案。

    The key to solve this problem is multiplying each digit of the numbers at the corresponding positions and get the sum values at each position. That is how we do multiplication manually.

    用StringBuilder 也有不同的用法,可以用insert , 也可以用append. 不过用append后面要reverse(), 因此run time 增加了。


    Java code:

    public String multiply(String num1, String num2) {
            String n1 = new StringBuilder(num1).reverse().toString();
            String n2 = new StringBuilder(num2).reverse().toString();
            int[] d = new int[num1.length() + num2.length()];    
            
            //multiply each digit and sum at the corresponding positions
            for(int i=0; i < n1.length(); i++){
                for(int j=0; j < n2.length(); j++){
                    d[i+j] += (n1.charAt(i) - '0') *(n2.charAt(j) - '0');
                }
            }
            
            StringBuilder sb = new StringBuilder();
            
            //calculate each digit
            for(int i=0; i< d.length; i++){
                int mod = d[i]%10;
                int carry = d[i]/10;
                if(i+1 < d.length){
                    d[i+1] += carry;
                }
                sb.insert(0, mod);
            }
            
            //remove front 0's
            while(sb.charAt(0) == '0' && sb.length() >1) {
                sb.deleteCharAt(0);
            }
            return sb.toString();
        }

    或者

    public String multiply(String num1, String num2) {
            String n1 = new StringBuilder(num1).reverse().toString();
            String n2 = new StringBuilder(num2).reverse().toString();
            int[] d = new int[num1.length() + num2.length()];    
            
            //multiply each digit and sum at the corresponding positions
            for(int i=0; i < n1.length(); i++){
                for(int j=0; j < n2.length(); j++){
                    d[i+j] += (n1.charAt(i) - '0') *(n2.charAt(j) - '0');
                }
            }
            
            StringBuilder sb = new StringBuilder();
            
            //calculate each digit
            for(int i=0; i< d.length; i++){
                int mod = d[i]%10;
                int carry = d[i]/10;
                if(i+1 < d.length){
                    d[i+1] += carry;
                }
                sb.append(mod);
            }
            
            //remove front 0's
            while(sb.length() >1 && sb.charAt(sb.length()-1) == '0') {
                sb.deleteCharAt(sb.length()-1);
            }
            return sb.reverse().toString();
        }

    Reference:

    1. http://www.programcreek.com/2014/05/leetcode-multiply-strings-java/

  • 相关阅读:
    Android之剑法初略:dalvik vm和jvm比较
    人民币阿拉伯数字转换为汉字大写 code
    数据库定时备份方案及实践
    [postfix]添加黑名单
    [php][随机数]曲线式的随机
    记公司服务器维护经历
    批量修改符号链接实现思路
    复杂数组的签名生成方法
    [已解决]ubuntu下chrome和firefox输入框内无法快捷键全选
    [已解决]centos6.4 php连接mysql和memcache提示权限不允许
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4828584.html
Copyright © 2011-2022 走看看