ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Js 实现螺旋,逆螺旋矩阵

2021-05-17 21:35:42  阅读:227  来源: 互联网

标签:min -- transformation 螺旋 矩阵 Js 数组 col row


题目

制定一个函数,通过传输一个值,生成如下所示的效果。

1  2  3  4  5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

思路:

该效果是一个矩阵,本思路是生成一个二维数组来达成该效果。
1、如图所示,矩阵是由一个 1~25 的数字生成,实际上即 1~nn 的数字组成。即一维数组[1, 2, 3, ..., nn]。

-> 注:n 为函数输入的值

2、根据算法,将值一一放入二维数组中相应的位置。组成如

[[1,2,3],
 [8,9,4],
 [7,6,5]]

-> 思考: 算法的核心即在此,如何正确无误的把一维数组转为二维数组。

方式 1:按 1,2,3, 8,9,4, 7,6,5 这样放?思考发现其值很难找到规律。

方式 2: 按其螺旋规律,将 1,2,3,4,5,6,7,8,9 依次放入对应的位置。

代码如下:

function transformation(n) {
    // 1、初始化对应的二维数组
    const result = [...new Array(n)].map(() => [])
    // 2、初始化行列,以及判断条件
    let max = n - 1,
        min = 0,
        row = 0,
        col = 0;
    for (let i = 1, length = n * n; i <= length; i++) {
        result[row][col] = i
        switch (true) {
            case row === min && col < max:
                ++col;
                break;
            case col === max && row < max:
                ++row;
                break;
            case row === max && col > min:
                --col;
                break;
            case col === min && row > min:
                --row;
                break;
        }
        // 走完一圈,缩小范围
        if (row - 1 === min && col === min) {
            ++min;
            --max;
        }
    }
    return result; 
}

const resultArr = transformation(5)

举一反三

逆螺旋的矩阵如何生成?

代码如下:

function transformation(n) {
    // 1、初始化对应的二维数组
    const result = [...new Array(n)].map(() => [])
    // 2、初始化行列,以及判断条件
    let max = n - 1,
        min = 0,
        row = 0,
        col = 0;
    for (let i = 1, length = n * n; i <= length; i++) {
        result[row][col] = i
        switch (true) {
            case col === min && row < max:
                ++row;
                break;
            case row === max && col < max:
                ++col;
                break;
            case col === max && row > min:
                --row;
                break;
            case row === min && col > min:
                --col;
                break;
        }
        // 走完一圈,缩小范围
        if (col - 1 === min && row === min) {
            ++min;
            --max;
        }
    }
    return result; 
}

transformation(5)

标签:min,--,transformation,螺旋,矩阵,Js,数组,col,row
来源: https://www.cnblogs.com/lsAxy/p/14778654.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有