Re: [閒聊] 每日leetcode

看板Marginalman作者 (神楽めあ的錢包)時間1年前 (2024/08/08 22:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串671/1549 (看更多)
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
文章代碼(AID): #1cjDY3yM (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1cjDY3yM (Marginalman)