• 螺旋矩阵


    题目:

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

    示例 1:

    输入:
    [
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ]
    ]
    输出: [1,2,3,6,9,8,7,4,5]
    示例 2:

    输入:
    [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9,10,11,12]
    ]
    输出: [1,2,3,4,8,12,11,10,9,5,6,7]

    /**
     * @param {number[][]} matrix
     * @return {number[]}
     */
    var spiralOrder = function(nums) {
        let temp = [];
        //设定上下左右的边界
        if(nums.length==0){
    
            return [];
        }
        let right = nums[0].length-1;
        let left = 0;
        let top = 0;
        let bottom = nums.length-1;
    
        while(true){
    
            for(let i=left;i<=right;i++){//向右移动
                temp.push(nums[top][i]);
            }
            if(++top>bottom){
                break;
            }
    
            //向下运动
            for(let i=top;i<=bottom;i++){
                temp.push(nums[i][right]);
            }
            if(--right<left){
                break;
            }
    
            //向左运动
            for(let i=right;i>=left;i--){
                temp.push(nums[bottom][i]);
            }
            if(--bottom<top){
                break;
            }
    
            //向上运行
            for(let i=bottom;i>=top;i--){
                temp.push(nums[i][left]);
            }
            if(++left>right){
                break;
            }
    
        }
    
        return temp;
    };

    实现:主要是通过不停的变换上下左右的边界,当从左边界开始,向右移动了一次,则上边界向下移动一位;向下移动的时候,从上边界开始,向下移动一次,右边界向左移动一位;当向左移动的时候,从右边界开始,向左移动一次,下边界向上移动一位;当向上移动的时候,从下边界开始向上移动一次,左边界向右移动一位;直到:上边界大于下边界,或是左边界大于有边界,说明所有数据都已经遍历过了。

     2.

    题目:

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

    示例:

    输入: 3
    输出:
    [
    [ 1, 2, 3 ],
    [ 8, 9, 4 ],
    [ 7, 6, 5 ]
    ]

    /**
     * @param {number} n
     * @return {number[][]}
     */
    var generateMatrix = function(num) {
          let temp = [];
        for(let i=1;i<=num;i++){
            let demo = [];
            for(let j=1;j<=num;j++){
               demo.push(0);
            }
            temp.push(demo);
        }
        
        let left = 0;
        let right = num-1;
        let top = 0;
        let bottom = num-1;
        let count = 0;
        let end = num*num;
       
        while(true){
             //向左运动
            for(let i=left;i<=right;i++){
                temp[top][i] = ++count;
            }
            if(++top>bottom||count>end){
                break;
            }
            //向下
            for(let i=top;i<=bottom;i++){
                temp[i][right] = ++count;
            }
            if(--right<left||count>end){
                break;
            }
            //向左
            for(let i=right;i>=left;i--){
                temp[bottom][i] = ++count;
            }
            if(--bottom<top||count>end){
                break;
            }
            //向上
            for(let i=bottom;i>=top;i--){
                temp[i][left] = ++count;
            }
            if(++left>top||count>end){
                break;
            }
        }
        
    
        return temp;
    };

    来源:https://leetcode-cn.com/problems/spiral-matrix/solution/cxiang-xi-ti-jie-by-youlookdeliciousc-3/

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/spiral-matrix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    第九篇 正则表达式
    第八篇、递归、装饰器
    第四篇、函数和递归
    第二篇、HTML
    nginx rewrite标签配置以及用户认证配置
    nginx location
    nginx日志配置,以及日志轮询
    nginx别名配置,状态配置,include优化
    第一篇 先用socket模拟web服务器
    第二十八篇、自定义线程池
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11740953.html
Copyright © 2020-2023  润新知