回答編集履歴
3
入れ子が深くなりすぎるのを嫌って修正
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
|
38
|
+
if (t[i].length <= j) continue;
|
39
|
-
|
39
|
+
if (t[i][j] < lastNum) {
|
40
|
-
|
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
インデントがおかしかったので修正
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
|
-
|
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
コード修正と、補足説明
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
|
-
|
39
|
+
if (t[i][j] < lastNum) {
|
30
|
-
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
lastNum = t[i][j];
|
31
43
|
}
|
32
|
-
lastNum = t[i][j];
|
33
44
|
}
|
34
45
|
}
|
35
46
|
return true;
|