Leetcode - spiral-matrix
https://leetcode.com/problems/spiral-matrix/
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5]
Follow the direction, right -> down -> left -> up, use rowStart, rowEnd, columnStart, columnEnd for the each direction. After each direction, it should update rowStart, rowEnd, columnStart, columnEnd as well. Use visited to count visited element. Once visited is equal to total number, break.
func spiralOrder(matrix [][]int) []int { if len(matrix) == 0 || len(matrix[0]) == 0 { return []int{} } directions := []string{"right", "down", "left", "up"} rowStart := 0 rowEnd := len(matrix) columnStart := 0 columnEnd := len(matrix[0]) result := []int{} total := len(matrix) * len(matrix[0]) visited := 0 for visited != total { for _, d := range directions { if d == "right" { for i := columnStart; i < columnEnd; i++ { result = append(result, matrix[rowStart][i]) visited++ } rowStart++ } if d == "down" { for i := rowStart; i < rowEnd; i++ { result = append(result, matrix[i][columnEnd-1]) visited++ } columnEnd-- } if d == "left" { for i := columnEnd-1; i >= columnStart; i-- { result = append(result, matrix[rowEnd-1][i]) visited++ } rowEnd-- } if d == "up" { for i := rowEnd-1; i >= rowStart; i-- { result = append(result, matrix[i][columnStart]) visited++ } columnStart++ } if (rowStart == rowEnd && columnStart == columnEnd) || (visited == total) { break } } if rowStart == rowEnd && columnStart == columnEnd { break } } return result }
# @param {Integer[][]} matrix # @return {Integer[]} def spiral_order(matrix) return [] if matrix.length == 0 || matrix[0].length == 0 r = matrix.length c = matrix[0].length row_start = 0 row_end = r - 1 column_start = 0 column_end = c - 1 result = [] total = r * c visited = 0 directions = ["right", "down", "left", "up"] while visited != total directions.each do |d| if d == "right" for i in column_start..column_end do result << matrix[row_start][i] visited += 1 end row_start += 1 end if d == "down" for i in row_start..row_end do result << matrix[i][column_end] visited += 1 end column_end -= 1 end if d == "left" i = column_end while i >= column_start result << matrix[row_end][i] visited += 1 i -= 1 end row_end -= 1 end if d == "up" i = row_end while i >= row_start result << matrix[i][column_start] visited += 1 i -= 1 end column_start += 1 end if (row_start == row_end && column_start == column_end) || visited == total break end if row_start == row_end && column_start == column_end break end end end return result end
Feb 03, 2022 02:49:03 PM
Brilliant and great work has been done out here in nice and effective ways.
Sep 19, 2022 12:59:37 AM
Advised to everyone can contact the class teacher to get important questions for all lessons and topics of EVS. Every Telugu Medium, English Medium and Urdu Medium student of the State Board can download the AP 10th Class EVS Model Paper 2023 Pdf with answers for term-1 & term-2 exams of SA-1, SA-2 and other exams of the board. AP 10th Evs Model Paper Environmental Education is one of the most important subjects and it’s a part of Science. School Education Department and various leading private school teaching staff have designed and suggested the practice question paper for all Part-A, Part-B, Part-C, and Part-D questions of SA-1, SA-2, FA-1, FA-2, FA-3, FA-4 and Assignments.