这一题对我来说有些难度,起码是要看题解才能明白的程度,其核心思路就是从二维数组来设计,得到其最大长度,一行一行的从上往下,或从下往上进行填充
要求
rows * cols != length
无效let nums = [19, 10, 3, 7, 9, 8, 5, 2, 1, 17, 16, 14, 12, 18, 6, 13, 11, 20, 4, 15] let rowsCount = 5 let colsCount = 4 /* [ [19,17,16,15], [10,1,14,4], [3,2,12,20], [7,5,18,11], [9,8,6,13] ] */
题解
Array.prototype.snail = function (rowsCount, colsCount) { if (rowsCount * colsCount !== this.length) return false; let resAry = Array.from({ length: rowsCount }, () => []); // 创建对应二维数组 let seq = true; //默认从上往下 true 否则false相反 let start = 0; //记录行数 如果到达最大行数则使seq相反 for (let i = 0; i < this.length; i++) { resAry[start].push(this[i]); //填充 // 如果是从上往下 则判断是否到达最大行数,到达则相反 否则再继续往下 // 反过来也一样 if (seq) { if (start === rowsCount - 1) { seq = false; } else { start++; } } else { if (start === 0) { seq = true; } else { start--; } } } return resAry; }; let nums = [ 19, 10, 3, 7, 9, 8, 5, 2, 1, 17, 16, 14, 12, 18, 6, 13, 11, 20, 4, 15, ]; console.log(nums.snail(5, 4));