GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — 螺旋矩阵-54 · Issue #112 · sl1673495/leetcode-javascript Open Labels Description给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 来源:力扣(LeetCode) 思路记录一个 visited 数组,从 直到遇到边界或者已经访问过的元素 则切换成下一个方向,每访问一个元素就把结果放入 这里方向用 /** * @param {number[][]} matrix * @return {number[]} */ let spiralOrder = function (matrix) { let maxY = matrix.length; if (!maxY) return []; let maxX = matrix[0].length; // 记录一个 visited 数组 // 按照 右 -> 下 -> 左 -> 上 的方向不断前进 // 直到遇到边界或者已经访问过的元素 则切换成下一个方向 let dirs = [ [0, 1], // 右 [1, 0], // 下 [0, -1], // 左 [-1, 0], // 上 ]; let currentDirIndex = 0; let visited = []; for (let y = 0; y < maxY; y++) { visited[y] = []; } let isValid = (y, x) => { return y >= 0 && y < maxY && x >= 0 && x < maxX && !visited[y][x]; }; let targetLength = maxY * maxX; let res = []; let helper = (y, x) => { let val = matrix[y][x]; res.push(val); if (res.length === targetLength) { return res; } visited[y][x] = true; let [diffY, diffX] = dirs[currentDirIndex % 4]; let nextY = y + diffY; let nextX = x + diffX; if (!isValid(nextY, nextX)) { [diffY, diffX] = dirs[++currentDirIndex % 4]; nextY = y + diffY; nextX = x + diffX; } helper(nextY, nextX); }; helper(0, 0); return res; }; Activity
MetadataMetadataAssigneesLabelsProjectsMilestoneRelationshipsDevelopmentIssue actions |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |