質問するログイン新規登録

回答編集履歴

2

k = 0, の削除。コメントに対する回答を追加

2020/09/11 02:44

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -37,7 +37,7 @@
37
37
  int n = in.length();
38
38
  char[] out = new char[n];
39
39
  String t = "0387256789";
40
- for (int k = 0, i = 0; i < n; i++)
40
+ for (int i = 0; i < n; i++)
41
41
  out[i] = t.charAt(in.charAt(i) - '0');
42
42
  return String.valueOf(out);
43
43
  }
@@ -46,4 +46,26 @@
46
46
  System.out.println(Num("35421"));
47
47
  }
48
48
  }
49
- ```
49
+ ```
50
+ **追記2**
51
+ for文に、無意味な `k = 0, ` が入っていたのに気付きませんでしたか?
52
+ 削除しました。
53
+
54
+ out[i] = '3'; は、単なる代入です。
55
+
56
+ sb.append('3'); は、StringBuilderクラスのインスタンス sb についての
57
+ appendメソッドの呼び出しです。sb や '3' を引数として渡す作業が入ります。
58
+ StringBuilder sb は内部にバッファを持っていて、今回の append でそれが
59
+ バッファオーバーフローしないかどうかチェックしてから '3' をバッファに入れます。
60
+ その後、this すなわち sb を返すという作業も必要です。
61
+
62
+ StringBuilder を使うほうが効率が悪いのは明白です。
63
+
64
+ String t = "0387256789"; ですが、"0123456789" と比べてみてください。
65
+ '1' → '3'
66
+ '2' → '8'
67
+ '3' → '7'
68
+ '4' → '2'
69
+ '5' → '5'
70
+ という対応になっています。
71
+ 入力文字列の i番目の文字 in.charAt(i) に対応する文字への変換表です。

1

コードを追加

2020/09/11 02:44

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -22,4 +22,28 @@
22
22
  実行結果
23
23
  ```text
24
24
  7 5 2 8 3
25
+ ```
26
+ **追記**
27
+ > 最終的にはSystem.out.printlnで75283を表示させたい。
28
+
29
+ こう書いてあったので、数字の間にスペースが要るのかと思ったら、
30
+ 全角数字で書いてあるからそう見えただけのようでした。
31
+
32
+ + で文字列を連結したり、StringBuilder を使うよりも char の配列を
33
+ 使ったほうが効率が良いと思って書き直してみました。
34
+ ```Java
35
+ class Test {
36
+ public static String Num(String in) {
37
+ int n = in.length();
38
+ char[] out = new char[n];
39
+ String t = "0387256789";
40
+ for (int k = 0, i = 0; i < n; i++)
41
+ out[i] = t.charAt(in.charAt(i) - '0');
42
+ return String.valueOf(out);
43
+ }
44
+
45
+ public static void main(String[] args) {
46
+ System.out.println(Num("35421"));
47
+ }
48
+ }
25
49
  ```