简体   繁体   中英

How to solve Spiral Matrix in go

https://leetcode.com/problems/spiral-matrix/ golang implement. the result as follow:

Run Code Status: Runtime Error

Run Code Result: ×

Your input

[] Your answer

Expected answer

[] Show Diff

why [] is the test case ,it's just a one-dimensional slice ?

my code is :

func sprial(begin_r, begin_c, row, col int, matrix [][]int) []int {
s := make([]int, col*row, col*row+10)
k := 0
if row == 1 && col == 1 {
    s[k] = matrix[begin_r][begin_c]

    return s
} else if row == 1 {
    return matrix[begin_r][begin_c : col-1]
} else if col == 1 {
    return matrix[begin_r : row-1][begin_c]
} else {
    for i := begin_c; i < col; i++ {
        s[k] = matrix[begin_r][i]
        k++
    }
    for i := begin_r + 1; i < row; i++ {
        s[k] = matrix[i][col-1]
        k++
    }
    for i := col - 2; i >= begin_c; i-- {
        s[k] = matrix[row-1][i]
        k++
    }
    for i := row - 2; i >= begin_r+1; i-- {
        s[k] = matrix[i][begin_c]
        k++
    }

    return s[:k-1]
}
}

func spiralOrder(matrix [][]int) []int {
m := len(matrix)
n := len(matrix[0])
i := 0
j := 0
//  var rS []int
k := 0

//s1 := make([]int, m*n, m*n)

var s1 = []int{}
for {
    if m <= 0 || n <= 0 {
        break
    }
    s := sprial(i, j, m, n, matrix)
    if k == 0 {
        s1 = s

    } else {

        s1 = append(s1, s...)

    }

    i++
    j++
    m -= 2
    n -= 2
    k++
}
return s1
}
func spiralOrder(matrix [][]int) []int {
    if len(matrix) == 0 || len(matrix[0]) == 0 {
        return nil
    }

    m, n := len(matrix), len(matrix[0])

    next := nextFunc(m, n)

    res := make([]int, m*n)
    for i := range res {
        x, y := next()
        res[i] = matrix[x][y]
    }

    return res
}

func nextFunc(m, n int) func() (int, int) {
    top, down := 0, m-1
    left, right := 0, n-1
    x, y := 0, -1
    dx, dy := 0, 1
    return func() (int, int) {
        x += dx
        y += dy
        switch { 
        case y+dy > right:
            top++
            dx, dy = 1, 0
        case x+dx > down:
            right--
            dx, dy = 0, -1
        case y+dy < left:
            down--
            dx, dy = -1, 0
        case x+dx < top:
            left++
            dx, dy = 0, 1
        }
        return x, y
    }
}

Source: https://github.com/aQuaYi/LeetCode-in-Go/blob/master/Algorithms/0054.spiral-matrix/spiral-matrix.go

This repository has most of the solutions to LeetCode problems in a very optimal manner. Please do take a look. Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM