今天去智度科技面試,遇到一個算法題,沒有答上,可惜了這次機會。
從矩陣的左上角出發,初始時向右移動;如果前方是未曾經過的格子,則繼續前進,否則右轉;重複上述操作直至經過矩陣中所有格子。根據經過順序,在格子中依次填入1, 2, 3, … , n1,2,3,…,n,便構成了一個螺旋矩陣。2
下圖是一個n = 4n=4 時的螺旋矩陣。
實現算法如下:
public static void getLuoXuan(int n){
int[][] arr = new int[n][n];
int m; //m表示循環的次數,如果n爲偶數的話就循環n/2次,n爲奇數的話就循環(n+1)/2次
if (n%2==0)//n爲偶數
m=n/2;
else
m=(n+1)/2;
int value=1;
for (int i=0;i<m;i++){
for (int a=i;a<=n-i-1;a++){ //從左到右
arr[i][a]=value++;
}
for (int b =i+1;b<=n-i-1;b++){//從上到下
arr[b][n-i-1]=value++;
}
for (int c=n-i-2;c>=i;c--){//從右到左
arr[n-i-1][c]=value++;
}
for (int d =n-i-2;d>=i+1;d--){//從下到上
arr[d][i]=value++;
}
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}