跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的,坚持每天打卡下,希望明年能跳个大厂!
代码随想录
LeetCode:59.螺旋矩阵II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
四个顶点,四条边,每次处理一个顶点和一条边,然后每完成一圈都需要往里面一层移动,因为每一圈从行的角度来看都是减少两个单元格,所以会一直绕n / 2
圈,如果n
是奇数还需要单独考虑最中间的点的值
public int[][] generateMatrix(int n) {
int[][] nums = new int[n][n];
int startX = 0, startY = 0;
int i = 0, j = 0;
int offset = 1;
int count = 1;
int loop = 1;
while(loop <= n / 2){
for(j = startY; j < n - offset; j++){
nums[startX][j] = count++;
}
for(i = startX; i < n - offset; i++){
nums[i][j] = count++;
}
// 通过上面的for循环 已经有 j = n - offset
for(; j > startY; j--){
nums[i][j] = count++;
}
// 通过上面的for循环,已经有 i = n - offset
for(; i > startX; i--){
nums[i][j] = count++;
}
startX++;
startY++;
offset++;
loop++;
}
if(n % 2 == 1){
nums[startX][startY] = count;
}
return nums;
}