59.螺旋矩阵Ⅱ

19 阅读1分钟
图片.png

首先就是循环怎么写,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;
        
    }
}

这种题目看似很难,其实只要思路明确就可以,卡尔的方法感觉有点复杂,这个还是比较好理解的