golang刷leetcode技巧之如何解決矩陣中的路徑問題

這篇文章將為大家詳細講解有關golang刷leetcode 技巧之如何解決矩陣中的路徑問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創新互聯服務項目包括偏關網站建設、偏關網站制作、偏關網頁制作以及偏關網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,偏關網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到偏關省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!

請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那么該路徑不能再次進入該格子。例如,在下面的3×4的矩陣中包含一條字符串“bfce”的路徑(路徑中的字母用加粗標出)。

[["a","b","c","e"],
["s","f","c","s"],
["a","d","e","e"]]

但矩陣中不包含字符串“abfb”的路徑,因為字符串的第一個字符b占據了矩陣中的第一行第二個格子之后,路徑不能再次進入這個格子。

示例 1:

輸入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
輸出:true

示例 2:

輸入:board = [["a","b"],["c","d"]], word = "abcd"
輸出:false

提示:

  • 1 <= board.length <= 200

  • 1 <= board[i].length <= 200

解題思路

1,深度優先遍歷

2,首字母不匹配可以剪枝

3,注意golang slice 數據地址一樣,所以,需要clone 路徑,否則會回溯失敗

測試用例

[["A","B","C","E"],["S","F","E","S"],["A","D","E","E"]]

"ABCESEEEFS"

[["a","b"]]

"ba"

[["a"]]

"a"

[["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]]

"ABCCED"

代碼實現

func exist(board [][]byte, word string) bool {   for i:=0;i<len(board);i++{       for j:=0;j<len(board[0]);j++{           if board[i][j]!=word[0]{               continue           }           mark:=getMark(board)           if dfs(board,mark,i,j,word){               return true           }           //fmt.Println(mark)       }   }   return false}
func dfs(board [][]byte,mark1 [][]int,i,j int,word string)bool{   if word=="" {       return true   }   if i<0 || i>=len(board) || j<0 || j>=len(board[0]) || board[i][j]!=word[0] || mark1[i][j]!=0{      return false   }
  if len(word)==1 && word[0]==board[i][j]{       return true   }    mark:=cloneMark(mark1)    mark[i][j]=1    return dfs(board,mark,i+1,j,word[1:]) ||    dfs(board,mark,i,j+1,word[1:]) ||    dfs(board,mark,i-1,j,word[1:])||    dfs(board,mark,i,j-1,word[1:])}
func getMark(board [][]byte)[][]int{    mark:=make([][]int,len(board))    for k:=0;k<len(board);k++{        mark[k]=make([]int,len(board[0]))    }    return mark}
func cloneMark(mark [][]int)[][]int{    mark1:=make([][]int,len(mark))    for i:=0;i<len(mark);i++{        mark1[i]=make([]int,len(mark[0]))        for j:=0;j<len(mark[0]);j++{            mark1[i][j]=mark[i][j]        }    }    return mark1}

關于“golang刷leetcode 技巧之如何解決矩陣中的路徑問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

分享名稱:golang刷leetcode技巧之如何解決矩陣中的路徑問題
瀏覽路徑:http://m.kartarina.com/article20/pihijo.html

成都網站建設公司_創新互聯,為您提供外貿建站標簽優化網站收錄動態網站微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司
主站蜘蛛池模板: 亚洲国产精品成人AV无码久久综合影院 | 人妻精品久久无码专区精东影业| 在线精品无码字幕无码AV| 免费a级毛片无码a∨免费软件 | 亚洲av专区无码观看精品天堂| 日韩精品人妻系列无码专区免费| 伊人久久精品无码麻豆一区| 久久亚洲av无码精品浪潮 | 久久国产三级无码一区二区| 亚洲日韩国产精品无码av| 国产aⅴ激情无码久久久无码| 一本大道无码日韩精品影视_| 国产精品无码a∨精品| 国产AV无码专区亚洲AV麻豆丫 | 亚洲高清无码在线观看| 亚洲午夜无码久久久久软件| 国产综合无码一区二区辣椒| 久久久久久久久免费看无码| 无码免费一区二区三区免费播放| 无码任你躁久久久久久老妇App | 无码人妻一区二区三区在线| 亚洲AV无码不卡在线观看下载| 日韩精品无码免费一区二区三区| 无码天堂va亚洲va在线va| 无码国产精品一区二区免费式影视| 国产精品无码永久免费888| 在线精品免费视频无码的| 久久无码中文字幕东京热| 亚洲va无码手机在线电影| 成人免费无遮挡无码黄漫视频| 无码人妻精品中文字幕免费 | 无码熟妇人妻在线视频| 久久精品国产亚洲AV无码麻豆| 少妇无码太爽了在线播放| 秋霞鲁丝片无码av| 国产精品无码AV不卡| 日韩AV无码精品一二三区| 国产精品午夜无码av体验区| 麻豆精品无码国产在线果冻| 人妻丰满熟妇AV无码区| 无码日韩AV一区二区三区|