呂梁做網(wǎng)站互聯(lián)網(wǎng)公司排名100強
文章目錄
- 螺旋矩陣
- 解題思路
螺旋矩陣
給你一個正整數(shù) n
,生成一個包含 1
到 n2
所有元素,且元素按順時針順序螺旋排列的 n x n
正方形矩陣 matrix
。
示例 1:
輸入:n = 3
輸出:[[1,2,3],[8,9,4],[7,6,5]]
解題思路
模擬這個螺旋過程。
- 初始化數(shù)組
- 確定循環(huán)次數(shù),loop = n / 2;
- 循環(huán)時,奇數(shù)的中間值需要特殊處理
- startx,starty,用于確定每一次循環(huán)的起始點
- offset,用于減少每一次循環(huán)的此處
- mid,用于處理中間值
終點:**循環(huán)不變量,**每一次循環(huán)遵循左閉右開的原則。
分為
- 最上方從左往右
- 最右方從上往下
- 最下方從右往左
- 最左方從下往上
詳細代碼如下:
class Solution {public int[][] generateMatrix(int n) {//保證循環(huán)不變量的操作int startx = 0 ,starty = 0;int result[][] = new int[n][n]; //初始化數(shù)組int loop = n / 2; //循環(huán)次數(shù),奇數(shù)時,中間值需要特殊處理。int mid = n / 2; //中間值int i,j; //用于循環(huán)int offset = 1; //用于減少每一次的循環(huán)次數(shù)int count = 1; //用于賦值while(loop-- > 0){ //循環(huán)次數(shù)//最上方從左往右for(j = starty; j < n - offset; j++){result[startx][j] = count++;}//最右方從上往下for(i = startx;i < n- offset;i++){result[i][j] = count++;}//最下方從右往左for(;j > starty;j--){result[i][j] = count++;}//最左方從下往上for(;i > startx;i--){result[i][j] = count++;}startx++; //設置下一次的起始點starty++; //設置下一次的起始點offset++; //設置下一次的循環(huán)次數(shù)}//如果為奇數(shù),中間值,特殊處理if(n % 2 == 1){result[mid][mid] = count; }return result;}
}
我是小輝,24 屆畢業(yè)生。當下是找工作ing,歡迎關注,持續(xù)分享。