LeetCode - 2624.蜗牛排序

学习 · 2023-10-17 · 43 人浏览

这一题对我来说有些难度,起码是要看题解才能明白的程度,其核心思路就是从二维数组来设计,得到其最大长度,一行一行的从上往下,或从下往上进行填充
2023-10-17T02:00:01.png

要求

  1. 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));
蜗牛排序
Theme Jasmine by Kent Liao