剑指Offer——顺时针打印矩阵(JS实现)

简介: 剑指Offer——顺时针打印矩阵(JS实现)

题目描述

image.png

解题思路(路径循环法)

  • 所谓的路径循环,就是路径本身存在一种循环,就是每一次顺时针是一次循环,每循环完一条边,就要修改想对应的边界条件,直到循环遍历完所有的节点。
  • 所谓一图胜千言,有时候很多描述不如一张图片来的清晰易懂。
  • 具体的思路来源于下面的这个题解

image.png

解题代码

var spiralOrder = function(matrix) {
    // !解题核心:本题存在一个路径上的循环:
    // 循环(左 ——> 右,上 ——> 下,右 ——> 左,下 ——> 上)
    // 如果是空数组
    if (matrix.length === 0) return [];
    // 定义四个指针
    let top = 0;
    let bottom = matrix.length - 1;
    let left = 0;
    let right = matrix[0].length - 1;
    // 定义存储最终结果的数组
    let res = [];
    // 最外边的循环是控制 顺时针圈数的循环
    while (1) {
        // 左 ——> 右
        for (let i = left; i <= right; i++) {
            res.push(matrix[top][i]);
        }
        top++;
        if (top > bottom) break;
        // 上 ——> 下
        for (let i = top; i <= bottom; i++) {
            res.push(matrix[i][right]);
        }
        right--;
        if (right < left) break;
        // 右 ——> 左
        for (let i = right; i >= left; i--) {
            res.push(matrix[bottom][i]);
        }
        bottom--;
        if (bottom < top) break;
        // 下 ——> 上
        for (let i = bottom; i >= top; i--) {
            res.push(matrix[i][left]);
        }
        left++;
        if (left > right) break;
    }
    return res
};

总结(本题给我们的启示思路)

  • 启示一:学会给循环增加边界条件
  • 启示二:学会读懂题目中的隐藏循环条件
相关文章
|
4月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
5月前
关于three.js中的矩阵更新
关于three.js中的矩阵更新
66 1
|
5月前
|
存储 JavaScript vr&ar
three.js中的矩阵变换(模型视图投影变换)
three.js中的矩阵变换(模型视图投影变换)
98 1
|
8月前
|
JavaScript 前端开发
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
|
8月前
|
机器学习/深度学习 JavaScript Python
GEE机器学习——混淆矩阵Classifier.confusionMatrix()和errorMatrix()和exlain()的用法(js和python代码)
GEE机器学习——混淆矩阵Classifier.confusionMatrix()和errorMatrix()和exlain()的用法(js和python代码)
202 0
|
8月前
|
JavaScript 前端开发
JavaScript题解剑指offer : 09. 用两个栈实现队列
JavaScript题解剑指offer : 09. 用两个栈实现队列
49 0
|
JavaScript 前端开发 程序员
《剑指 Offer(第 2 版)》树部分JavaScript题解
《剑指 Offer(第 2 版)》树部分JavaScript题解
《剑指 Offer(第 2 版)》树部分JavaScript题解
|
存储 JavaScript 前端开发
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
|
JavaScript 算法 前端开发
【前端算法】JS实现数字千分位格式化
JS实现数字千分位格式化的几种思路,以及它们之间的性能比较
359 1
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
179 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法