LeetCode 解答 #43. Multiply Strings プログラミング練習

問題:
f:id:stlisacity:20180615140317p:plain
難易度: medium
入力: String
目的: 入力された二つのstrを数字に変換し、掛け算の結果を求めよ
出力: String

Stringとして入力された数字を掛け算して答えを求める問題です。
但しString.valueof等のライブラリを使う事は禁じられています。
入力を一文字ずつCharacterとしてIntegerに変換していく必要があります。

注意すべき事: 

  • Stringをintに直接変換するライブラリを使ってはならない
  • 入力は110を超える数字はない
  • 入力0-9しか含まず先頭が0であることはない(0の時以外)
  • 出力もStringです

以下回答です。

class Solution {
    public String multiply(String num1, String num2) {
        String n1 = new StringBuilder(num1).reverse().toString();
        String n2 = new StringBuilder(num2).reverse().toString();
        int [] temp = new int[num1.length() + num2.length()];
        for (int i=0; i<num1.length(); i++) {
            for (int j=0; j<num2.length(); j++) {
                temp[i+j] += (n1.charAt(i) - '0') * (n2.charAt(j) - '0');
            }
        }
        StringBuilder res = new StringBuilder();
        for (int i=0; i<temp.length; i++) {
            int carry = temp[i] / 10;
            int mod = temp[i] % 10;
            if (i < temp.length - 1) temp[i+1] += carry;
            res.insert(0, mod);
        }
        while (res.charAt(0) == '0' && res.length() > 1) res.deleteCharAt(0);
        return res.toString();
    }
}

ライブラリを禁止されているのでChrarcterとしてintに一文字ずつ変換
Characterをそのまま変換するとASCIIの番号が変換されるので'0'を引くこと
StringBuilderを使うとinsertを頻繁に扱う場合Stringクラスよりも早く動いてくれる
後は繰り上げを注意しつつ掛け算をまねるだけで大丈夫です。

今日は以上。
よいプログラミング生活を!