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

回答編集履歴

3

入れ子が深くなりすぎるのを嫌って修正

2017/03/26 02:16

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -34,13 +34,12 @@
34
34
  }
35
35
  for (int j = 0; j < max; j++) {
36
36
  int lastNum = Integer.MIN_VALUE;
37
- for (int i = 0; i < t.length; t++) {
37
+ for (int i = 0; i < t.length; t++)
38
- if (t[i].length > j) {
38
+ if (t[i].length <= j) continue;
39
- if (t[i][j] < lastNum) {
39
+ if (t[i][j] < lastNum) {
40
- return false;
40
+ return false;
41
- }
42
- lastNum = t[i][j];
43
41
  }
42
+ lastNum = t[i][j];
44
43
  }
45
44
  }
46
45
  return true;

2

インデントがおかしかったので修正

2017/03/26 02:16

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -33,7 +33,7 @@
33
33
  max = Math.max(max, a.length);
34
34
  }
35
35
  for (int j = 0; j < max; j++) {
36
- int lastNum = Integer.MIN_VALUE;
36
+ int lastNum = Integer.MIN_VALUE;
37
37
  for (int i = 0; i < t.length; t++) {
38
38
  if (t[i].length > j) {
39
39
  if (t[i][j] < lastNum) {

1

コード修正と、補足説明

2017/03/26 02:10

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -17,6 +17,15 @@
17
17
  これをやろうとしたら、まず**横方向の最大の長さ**をとる必要があります。t[0]が最長という保証があればいいのですが、そうでないとしたらまずこのためにforを回して最長長さを調べる必要があります。
18
18
  そうしたら、まずt[i][j]のjを固定します。jの範囲は今調べた横方向最長まで、つまり0~(最長)-1です。
19
19
  例えばj=1で考えますが、t[i][1]を、iを動かしながら増加しているか調べます。ただし、この時t[i]に1番の要素があるか、つまりt[i].lengthが2以上あるかを確かめる必要があります(しないと例外発生)。
20
+
21
+ ```
22
+ ↓j=1ならこの縦方向を見る(各配列の1番目の要素)
23
+ t[0]:{1,4,5,10,11} <-t[0][1]は4
24
+ t[1]:{2,6,8} <-t[1][1]は6>4で成立
25
+ t[2]:{3,9,12} <-t[2][1]は9>6で成立
26
+ t[3]:{7} <-t[3][1]はないため、この回避をしないと例外発生
27
+ ```
28
+
20
29
  ```java
21
30
  public static boolean columnValuesIncrease(int [][] t){
22
31
  int max = 0;
@@ -26,10 +35,12 @@
26
35
  for (int j = 0; j < max; j++) {
27
36
  int lastNum = Integer.MIN_VALUE;
28
37
  for (int i = 0; i < t.length; t++) {
38
+ if (t[i].length > j) {
29
- if (t[i].length > j && t[i][j] < lastNum) {
39
+ if (t[i][j] < lastNum) {
30
- return false;
40
+ return false;
41
+ }
42
+ lastNum = t[i][j];
31
43
  }
32
- lastNum = t[i][j];
33
44
  }
34
45
  }
35
46
  return true;