当前位置:   article > 正文

算法篇——螺旋矩阵大集合(js版)_螺旋数字矩阵华为算法js解法

螺旋数字矩阵华为算法js解法

59.螺旋矩阵Ⅱ

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

链接:力扣

 

  1. var generateMatrix = function(n) {
  2. const ans = new Array(n).fill(0).map(() => new Array(n).fill(0));
  3. let left = 0, right = n - 1, up = 0, down = n - 1;
  4. let cnt = 1;
  5. while(cnt <= n * n){
  6. // 上半部分--要往右移动,所以边界是right,并且预先对向下移动进行控制
  7. for(let i = left; i <= right; i++) ans[up][i] = cnt++;
  8. up++;
  9. // 右半部分--要往下移动,所以边界是down,并且预先对向左移动进行控制
  10. for(let i = up; i <= down; i++) ans[i][right] = cnt++;
  11. right--;
  12. // 下半部分--要往左移动,所以边界是left,并且预先对向上移动进行控制
  13. for(let i = right; i >= left; i--) ans[down][i] = cnt++;
  14. down--;
  15. // 左半部分--要往上移动,所以边界是up,并且预先对向右移动进行控制
  16. for(let i = down; i >= up; i--) ans[i][left] = cnt++;
  17. left++;
  18. // 结束之后开始下一圈
  19. }
  20. return ans;
  21. };

54.螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 

链接:力扣

 

  1. var spiralOrder = function(matrix) {
  2. let m = matrix.length;
  3. let n = matrix[0].length;
  4. let left = 0, right = n - 1, up = 0, down = m - 1;
  5. let numList = [];
  6. while(up <= down && left <= right) {
  7. for(let i = left; i <= right; i++)
  8. numList.push(matrix[up][i]);
  9. up++;
  10. for(let i = up; i <= down; i++)
  11. numList.push(matrix[i][right]);
  12. right--;
  13. if(up > down || left > right) break;
  14. for(let i = right; i >= left; i--)
  15. numList.push(matrix[down][i]);
  16. down--;
  17. for(let i = down; i >= up; i--)
  18. numList.push(matrix[i][left]);
  19. left++;
  20. }
  21. return numList;
  22. };

剑指Offer 29.顺时针打印矩阵

 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

链接:力扣

  1. var spiralOrder = function(matrix) {
  2. var m = matrix.length;
  3. if(m == 0) return matrix;
  4. let n = matrix[0].length;
  5. let left = 0, right = n - 1, up = 0, down = m - 1;
  6. let numList = [];
  7. while(up <= down && left <= right) {
  8. for(let i = left; i <= right; i++)
  9. numList.push(matrix[up][i]);
  10. up++;
  11. for(let i = up; i <= down; i++)
  12. numList.push(matrix[i][right]);
  13. right--;
  14. if(up > down || left > right) break;
  15. for(let i = right; i >= left; i--)
  16. numList.push(matrix[down][i]);
  17. down--;
  18. for(let i = down; i >= up; i--)
  19. numList.push(matrix[i][left]);
  20. left++;
  21. }
  22. return numList;
  23. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/490673
推荐阅读
相关标签
  

闽ICP备14008679号