【蓝桥杯】【基础】【Java】回形取数(超时)_java

下面是我手写的解题思路.

(本来字就丑的我更加卑微。)但是我jio得很清晰了,起码我懂了。

【蓝桥杯】【基础】【Java】回形取数(超时)_i++_02


这种解题是超时的,目前还没有更好的办法。我搜索了别人的代码也貌似没有好的解决方案,那就先历史遗留吧。

源码

package 回形取数;

import java.util.Scanner;

public class Main_超时 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//m行 n列
int m = scanner.nextInt();
int n = scanner.nextInt();
int[][] a = new int[200][200];
int total = m*n;

for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
a[i][j] = scanner.nextInt();
}
}
int i = 0;
int j = 0;
while(total > 0){
while( i < m && a[i][j] != -1){//down
System.out.print(a[i][j]+" ");
a[i][j] = -1;
i++;
total--;
}
i--; //i会在赋值为-1后再多加一次。
j++;
while( j < n && a[i][j] != -1){//right
System.out.print(a[i][j]+" ");
a[i][j] = -1;
j++;
total--;
}
j--;
i--;
while( i >=0 && a[i][j] != -1){//up
System.out.print(a[i][j]+" ");
a[i][j] = -1;
i--;
total--;
}
i++;
j--;
while( j >=0 && a[i][j] != -1){//left
System.out.print(a[i][j]+" ");
a[i][j] = -1;
j--;
total--;
}
j++;
i++;
}

}



}