Re: [閒聊] 每日leetcode
885. Spiral Matrix III
給你一個2-D矩陣的列數(rows)、行數(cols)
還要起點[rstart,cstart]
請你依照順時針的順序
把經過的點列出來
在過程中,可能會超過矩陣的範圍
思路:
cnt為總共要經過的格數
就依照右左下上的順序一開始要走的步數矩陣[1,1,2,2]
每走過一個循環,就把步數矩陣裡面的值都加2
就這樣邊走邊紀錄,走到cnt==0就可以得到答案了
golang code :
func spiralMatrixIII(rows int, cols int, rStart int, cStart int) [][]int {
Ans := make([][]int, 0)
moveStep := []int{1, 1, 2, 2}
cnt := rows*cols - 1
Ans = append(Ans, []int{rStart, cStart})
chk := func(r, c int) bool {
return r > -1 && r < rows && c > -1 && c < cols
}
for cnt > 0 {
for i := 0; i < moveStep[0]; i++ {
cStart++
if chk(rStart, cStart) {
Ans = append(Ans, []int{rStart, cStart})
cnt--
}
}
for i := 0; i < moveStep[1]; i++ {
rStart++
if chk(rStart, cStart) {
Ans = append(Ans, []int{rStart, cStart})
cnt--
}
}
for i := 0; i < moveStep[2]; i++ {
cStart--
if chk(rStart, cStart) {
Ans = append(Ans, []int{rStart, cStart})
cnt--
}
}
for i := 0; i < moveStep[2]; i++ {
rStart--
if chk(rStart, cStart) {
Ans = append(Ans, []int{rStart, cStart})
cnt--
}
}
for i := 0; i < 4; i++ {
moveStep[i] += 2
}
}
return Ans
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.143.198 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1723127939.A.F16.html
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 671 之 1549 篇):