LeetCode 解答 #43. Multiply Strings プログラミング練習
問題:
難易度: 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クラスよりも早く動いてくれる
後は繰り上げを注意しつつ掛け算をまねるだけで大丈夫です。
今日は以上。
よいプログラミング生活を!