首先就是循环怎么写,while可以一直进行,终止条件就是up向下移动大于down或者left大于right
另外就是每次执行一次for循环之后,应该搞清楚是将哪一条线向哪里移动
另外就是模拟一下过程,其实第一次遍历就输出了123,然后是45,然后是67,然后是8,最后是9,所以for里面应该是i<=right而不是<,
ps:循环变量只用i就可以了,不需要i和j。
class Solution {
public int[][] generateMatrix(int n) {
int nums[][] = new int[n][n];
int up = 0;
int down = n-1;
int left = 0;
int right = n-1;
int count = 1;
while(true){
for(int i = left ;i<=right;i++){ //从左到右遍历
nums[up][i] = count++;
}
if(++up > down) break; // 遍历完第一层之后,up应该++,因为接下来要进行下一行的从左到右
for(int i = up;i<=down;i++){ // 从上到下
nums[i][right] = count++;
}
if(--right < left) break;
for(int i = right;i>=left;i--){
nums[down][i] = count++;
}
if(--down < up) break;
for(int i = down;i>=up;i--){
nums[i][left] = count++;
}
if(++left > right) break;
}
return nums;
}
}
这种题目看似很难,其实只要思路明确就可以,卡尔的方法感觉有点复杂,这个还是比较好理解的