Posted Golang鎶€鏈垎浜?/a>

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相关的知识,希望对你有一定的参考价值。

鏈変竴澶╋紝濠峰┓鍘昏秴瓒呯殑澶у锛屾兂缁欏紓鍦板凡涔呯殑瓒呰秴涓€涓儕鍠溿€備絾鏄柟鍚戞劅涓嶅ソ鐨勫┓濠峰緢蹇氨鍦ㄥぇ瀛﹁糠璺簡锛岃秴瓒呭緱鐭ュ悗渚垮幓瀵绘壘鎬濇亱宸蹭箙鐨勫┓濠枫€傛鏃惰秴瓒呯殑濡堝涔熷湪鏉ュ鏍$殑璺笂锛岀幇鍦ㄨ秴瓒呰浠ユ渶蹇殑閫熷害鍘诲鎵惧┓濠凤紙涓嶇劧鍙兘浼氬嚭鐜版垜鍜屼綘濡堝悓鏃惰糠璺綘鍏堟晳璋佺殑闂浜嗮煂濓級銆傞偅涔堬紝闂鏉ヤ簡锛屼綘鍙互鍒跺畾涓€绉嶇瓥鐣ュ府瓒呰秴灏藉揩鎵惧埌濠峰┓鍚楋紵

鎹鐪嬪畬杩欑瘒鏂囩珷鐨勪汉閮借兘甯姪瓒呰秴瑙e喅闂鐨勫悓鏃讹紝鍐嶉『鎵嬫嬁涓猳ffer锛?/span>

涓嬮潰灏嗕緷娆′粙缁嶅箍搴︿紭鍏堟悳绱紙鏈枃绠€绉颁负骞挎悳锛夌殑瀹氫箟锛岀畻娉曟ā鏉匡紝淇╃甯歌鐨勯鍨嬶紝浠ュ強甯歌鐨勫嚭棰樼偣浜庢槗閿欑偣銆?/span>


涓€銆佷粈涔堟槸骞挎悳


骞挎悳瀹氫箟

鍙堣瘧浣滃搴︿紭鍏堟悳绱紝鎴栨í鍚戜紭鍏堟悳绱紝鏄竴绉嶅浘褰㈡悳绱㈡柟娉曘€傜畝鍗曠殑璇达紝骞垮害浼樺厛鎼滅储锛圔readth-First-Search锛孊FS锛夋槸浠庢牴鑺傜偣寮€濮嬶紝娌跨潃鏍戠殑瀹藉害閬嶅巻鏍戠殑鑺傜偣銆傚鏋滄墍鏈夎妭鐐瑰潎琚闂紝鍒欑畻娉曠粓姝€?/span>

骞挎悳姝ラ

浠ラ亶鍘嗕笅闈㈣繖妫垫爲涓轰緥

绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p> 
 <ul class=

  • 瀹氫竴涓嚭鍙戠偣锛氬亣璁炬垜浠粠v1鍑哄彂鏉ラ亶鍘嗚繖妫垫爲锛屽厛灏唙1瀛樺埌闃熷垪que涓?/span>


    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p></li> 
  <li class=

    鎸夊眰閬嶅巻锛氫粠闃熷垪涓彇鍑簐1锛岀劧鍚庡皢v1鑳芥悳绱㈠埌鐨剉2锛寁3瀛樺埌闃熷垪que涓?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?> 
     <br> 
    </figcaption> 
   </figure></li> 
  <li class=

    鍐嶄粠que涓彇鍑簐2锛寁3锛屽皢v2鑳芥悳绱㈠埌鐨剉4鍜寁5锛寁3鑳芥悳绱㈠埌鐨剉6鍜寁7鏀惧埌que涓?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?> 
    </figcaption> 
   </figure></li> 
  <li class=

    鍐嶄粠que涓彇鍑簐4锛寁5锛寁6锛寁7锛屽潎鏃犲瓙鑺傜偣鍙互閬嶅巻锛屽洜姝ら亶鍘嗙粨鏉?/span>

  • 浠g爜濡備笅

     1//鏍戠殑鑺傜偣
    2type TreeNode struct {
    3    Val   int
    4    Left  *TreeNode
    5    Right *TreeNode
    6}
    7
    8func bfs(root *TreeNode) {
    9  //鍒濆鍖栭槦鍒?/span>
    10    que := make([]*TreeNode, 0100)
    11    que = append(que, root)
    12
    13  //寰幆闃熷垪鎵€鏈夊厓绱?/span>
    14    for len(que) != 0 {
    15        curSize := len(que)
    16
    17    //寰幆閬嶅巻姣忓眰鑺傜偣
    18        for i := 0; i < curSize; i++ {
    19      //鍙栧嚭闃熷垪涓妭鐐?/span>
    20            tnode := que[0]
    21            que = que[1:]
    22
    23      //姹傚嚭璇ヨ妭鐐规墍鑳藉埌杈剧殑鑺傜偣锛岃繘琛屽叆闃熷垪鎿嶄綔
    24            if tnode.Left != nil {
    25                que = append(que, tnode.Left)
    26            }
    27            if tnode.Right != nil {
    28                que = append(que, tnode.Right)
    29            }
    30        }
    31    }
    32}

    鎶借薄涓烘ā鏉?/span>

     1   func bfs(root *TreeNode) int {
    2   //鍒濆鍖栭槦鍒?/span>
    3      que := make([]*TreeNode, 0100)
    4      que = append(que, root)
    5      dep := 1
    6
    7      //寰幆闃熷垪鎵€鏈夎妭鐐?/span>
    8      for len(que) != 0 {
    9         curSize := len(que)
    10
    11         //寰幆閬嶅巻姣忓眰鑺傜偣
    12         for i := 0; i < curSize; i++ {
    13            //鍙栧嚭闃熷垪棣栬妭鐐?/span>
    14            tnode := que[0]
    15            que = que[1:]
    16
    17           for 褰撳墠鑺傜偣鎵€鏈夋柟鍚憑
    18            //瀵圭Щ鍔ㄥ悗鐨勮妭鐐瑰仛鍧愭爣鍊煎彉鍖?/span>
    19
    20            //鏃犳硶鍒拌揪鐐癸紝鏄惁涓鸿竟鐣岋紝闅滅鐗?/span>
    21             ...
    22            //缁堢偣鍒ゆ柇锛岄鐩墍姹傜殑鐐?/span>
    23             ...
    24            //鍏ラ槦鍒?/span>
    25             ...
    26           }
    27         }
    28        //娣卞害鍙樺寲锛堝眰鏁版垨姝ユ暟锛?/span>
    29         dep++
    30      }
    31      return 0
    32   }

    鏄撻敊鐐?/strong>

    • 閬嶅巻姣忓眰鑺傜偣鏃讹紝鍏堟眰鍑哄綋鍓嶉槦鍒楅暱搴urSize鑰屼笉鏄敤len(que)浣滀负璇ュ眰闃熷垪鐨勯暱搴︼紝濡傛灉鐢╨en(que)鍚庨潰鍏ラ槦鍒楁搷浣滐紝浼氫娇len(que)涓€鐩村湪鍙樺寲

    • 杈圭晫鍊笺€佺粨鏋滃€煎垽鏂紱鍏ラ槦鍒楃殑鍒ゆ柇椤哄簭锛氬叆闃熷垪涓€瀹氭槸鍦ㄦ渶鍚庯紝濡傛灉鏀惧湪鍓嶉潰浼氬皢鏃犳硶鍒拌揪鐐规斁鍏ラ槦鍒?/span>

    甯﹀蹇樺綍鐨勫箍鎼?/strong>

    鍦ㄦ爲涓妭鐐逛箣闂存槸鏈夋柟鍚戠殑锛屾垜浠彧鑳戒粠鐖惰妭鐐归亶鍘嗗埌瀛愯妭鐐癸紝鑰屾棤娉曚粠瀛愯妭鐐归亶鍘嗗埌鐖惰妭鐐癸紝浣嗘槸鍦ㄥ浘鐨勯亶鍘嗕腑寰€寰€瀛愯妭鐐逛篃鑳介亶鍘嗗埌鐖惰妭鐐广€備緥濡備笅鍥句腑锛屾瘡涓妭鐐瑰彲浠ユ湁涓婁笅宸﹀彸锛屼互鍙婂乏涓婏紝宸︿笅锛屽彸涓婏紝鍙充笅鍏釜鏂瑰悜鍙互绉诲姩锛屼粠A1鍑哄彂鍙互閬嶅巻鍒癆2锛孊1锛孊2鐐癸紝褰揂2鍑洪槦鍒楁椂锛屼粬鍚屾牱鍙互閬嶅巻鍒癆1锛岃繖鏍稟1灏变細琚噸澶嶉亶鍘嗭紝鍥犳闇€瑕佸畾涔変竴涓獀isited鍒囩墖鏍囪褰撳墠鍝簺鑺傜偣琚亶鍘嗚繃銆?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p> 
 <p class=

    浜屻€佸父瑙侀鍨?/strong>


    鍥句腑鏈€鐭矾寰?/span>

    涓嬮潰鏉ョ湅鐪嬪箍鎼滄€庝箞瑙e喅瓒呰秴鐨勯棶棰橈紝鐢?琛ㄧず绌哄湴锛?琛ㄧず闅滅鐗╋紝鍋囪瓒呰秴鍦ㄥ湴鍥惧乏涓婅锛屽┓濠峰湪鍦板浘鐨勫彸涓嬭锛岃秴瓒呮瘡涓€姝ュ彲浠ユ部鐫€鍏釜鏂瑰悜绉诲姩銆傞偅涔堝湴鍥惧彲浠ユ娊璞′负涓嬪浘鎵€绀猴紝瓒呰秴甯屾湜鐨勫氨鏄敤鏈€灏戠殑绉诲姩姝ユ暟浠庡乏涓婅绉诲姩鍒板彸涓嬭銆?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p> 
 <p class=鍒嗘瀽锛氳秴瓒呯殑闂鏄爣鍑嗙殑鍥句腑姹備咯鐐归棿鏈€鐭矾寰勯棶棰橈紝鏄剧劧鍙互鍒╃敤骞挎悳浠庡乏涓婅鍑哄彂锛屼竴灞傚眰鐨勯亶鍘嗕笅鍘荤洿鍒伴亶鍘嗗埌鍙充笅瑙掞紝涓轰簡蹇€熷府瓒呰秴瑙e喅闂锛屼笅闈㈢洿鎺ヤ笂妯℃澘

     1func bfs(root *TreeNode) int {
    2   //鍒濆鍖栭槦鍒?/span>
    3   que := make([]*TreeNode, 0100)
    4   que = append(que, root)
    5   dep := 1
    6
    7   //寰幆闃熷垪鎵€鏈夎妭鐐?/span>
    8   for len(que) != 0 {
    9      curSize := len(que)
    10
    11      //寰幆閬嶅巻姣忓眰鑺傜偣
    12      for i := 0; i < curSize; i++ {
    13
    14         //鍙栧嚭闃熷垪鑺傜偣
    15         tnode := que[0]
    16         que = que[1:]
    17
    18        for 褰撳墠鑺傜偣鎵€鏈夋柟鍚憑
    19          //瀵圭Щ鍔ㄥ悗鐨勮妭鐐瑰仛鍧愭爣鍊煎彉鍖?/span>
    20
    21         //鐗规畩鍊硷紝鏄惁涓鸿竟鐣岋紝闅滅鐗?/span>
    22          ...
    23         //缁撴灉鍊煎垽鏂紝鏄惁鍒拌揪棰樼洰瑕佹眰鐨勭洰鏍囩偣
    24          ...
    25         //鍏ラ槦鍒?/span>
    26          ...
    27        }
    28      }
    29     //娣卞害鍙樺寲锛堟鏁帮級
    30      dep++
    31   }
    32   return 0
    33}


    • 鏄惁闇€瑕乿isited鏍囪瘑锛氬湪鎼滅储鏃舵瘡涓妭鐐归兘浼氬悜鍏釜鏂瑰悜鎼滅储锛孉鍚戝彸绉诲姩鍒癇鑺傜偣鍏ラ槦鍒楀悗锛屽悜鍚庨亶鍘嗕笅涓€灞傛椂B杩樹細鍚戝乏鎼滅储鍒癆锛屽洜姝ら渶瑕佺敤visited杩涜鏍囪瘑璇ヨ妭鐐规槸鍚﹁閬嶅巻杩?/span>

    • 纭畾绉诲姩鏂瑰悜锛氳秴瓒呬竴鍏辨湁鍏釜绉诲姩鏂瑰悜锛屽彲浠ョ敤鏁扮粍next := [][]int{{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}琛ㄧず绉诲姩鏂瑰悜锛屼咯涓淮搴﹀垎鍒〃绀哄潗鏍噚鍜寉鐨勫彉鍖?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p> 
 <ul class=

  • 閬嶅巻鐨勭壒娈婂€煎垽鏂細杩欓鏈夎竟鐣屽€煎锛岄殰纰嶇墿锛屼互鍙婄粓鐐?/span>

  • 瀹屾暣浠g爜濡備笅

     1func shortestPathBinaryMatrix(grid [][]int) int {
    2    width := len(grid)
    3  //鑻ヨ捣鐐瑰拰缁堢偣鏄殰纰嶇墿鍒欏湴鍥炬湁闂
    4    if grid[0][0] == 1 || grid[width-1][width-1] == 1 {
    5        return -1
    6    }
    7  //鍦板浘涓捣鐐瑰拰缁堢偣鏄竴涓偣
    8    if width == 1 {
    9        return 1
    10    }
    11
    12  //鍒濆鍖栭槦鍒楀拰visited
    13    que := make([]*Node, 0, width*width)
    14    visited := make([][]bool, width)
    15    for i := 0; i < len(visited); i++ {
    16        visited[i] = make([]bool, width)
    17    }
    18    dep := 1
    19  //姣忎釜鑺傜偣鎵€鑳借蛋鐨勫叓涓柟鍚?/span>
    20    next := [][]int{{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}
    21    que = append(que, &Node{00})
    22    visited[0][0] = true
    23
    24  //寮€濮嬫悳绱?/span>
    25    for len(que) != 0 {
    26        current := len(que)
    27    //鎸夊眰閬嶅巻
    28        for i := 0; i < current; i++ {
    29            top := que[0]
    30            que = que[1:]
    31      //瀵归槦鍒椾腑鐨勮妭鐐瑰仛鍏釜鏂瑰悜鐨勫潗鏍囧彉鍖?/span>
    32            for i := 0; i < 8; i++ {
    33                var temp *Node = new(Node)
    34                temp.x = top.x + next[i][0]
    35                temp.y = top.y + next[i][1]
    36        //绉诲姩鍚庡潗鏍囪秺鐣?/span>
    37                if temp.x >= width || temp.x < 0 || temp.y >= width || temp.y < 0 {
    38                    continue
    39                }
    40        //鎵惧埌缁堢偣锛堝彸涓嬭锛?/span>
    41                if temp.x == width-1 && temp.y == width-1 {
    42                    return dep + 1
    43                }
    44        //涓嶆槸闅滅鐗╁苟涓旀病鏈夎閬嶅巻杩囧叆闃熷垪
    45                if grid[temp.x][temp.y] != 1 && !visited[temp.x][temp.y] {
    46                    que = append(que, temp)
    47                    visited[temp.x][temp.y] = true
    48                }
    49            }
    50        }
    51    //灞傛暟鍔?
    52        dep++
    53    }
    54    return -1
    55}
    瀛楃涓叉渶鐭彉鍖栨鏁?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p> 
 <p class=甯姪瀹岃秴瓒呬箣鍚庯紝涔熻涓烘垜浠殑offer濂藉ソ鍑嗗涓嬩簡锛岄潰璇曠畻娉曞緢灏戜細鐩存帴鍑轰竴涓浘鐨刡fs棰樺瀷锛屾瘮杈冨父瑙佺殑鏄繖绉嶉鍨嬨€傝繖棰樼湅浼煎拰bfs娌℃湁鍏崇郴锛屼絾鏄垜浠◢浣滄娊璞″氨鍙互鑱旂郴鍦ㄤ竴璧蜂簡锛岃捣鐐筯it鑳藉尮閰嶇殑瀛楃涓蹭负*it锛宧 * t锛宧i*锛?span class="mq-440">涓巜orldList涓彲浠ュ尮閰嶇殑鑺傜偣灏辨槸浠巋it鍑哄彂鑳藉埌杈剧殑鑺傜偣浜?/strong>锛岃繖鏍蜂緷娆¤繛鎺ヤ笅鍘绘槸涓嶆槸灏卞彲浠ヨ繛鎴愬浘浜嗭紒杩欓涔熷氨鍙樻垚浜嗘眰hit鍒癱og鐨勬渶鐭窛绂汇€?/span>

    绠楁硶绯诲垪锛氬箍搴︿紭鍏堟悳绱?></p> 
 <p class=鍒嗘瀽锛?/span>

    • 鏄惁闇€瑕乿isited鏍囪瘑锛氳繖棰樼殑visited鏈変咯涓惈涔夛紝涓€涓槸鍒ゆ柇褰撳墠map涓槸鍚︽湁鍖归厤鐨剋ord锛屼簩鏄仛澶囧繕褰曪紝褰撲粠hit鍑哄彂灏唄ot鍔犲叆闃熷垪鍚庯紝闃叉hot閬嶅巻鍏跺彲鍒拌揪鐨勭偣鏃跺張灏唄it鍔犲叆闃熷垪涓?/span>

    • 纭畾绉诲姩鏂瑰悜锛氫互hit涓轰緥锛屽彧瑕佹弧瓒?it锛宧 * t锛宧i*锛岄兘涓哄彲绉诲姩鏂瑰悜锛屼篃灏辨槸寰幆hit涓瘡涓€涓瓧绗︼紝浠?a'鍒?z'閬嶅巻锛屾牴鎹畍isited鍒ゆ柇瀛楀吀涓槸鍚︽湁璇ュ瓧绗︿覆

    • 閬嶅巻鐨勭壒娈婂€煎垽鏂細缁堢偣锛屾槸鍚﹁閬嶅巻杩?/span>

    浠g爜

     1func ladderLength(beginWord string, endWord string, wordList []string) int {
    2    //瀹氫箟骞跺垵濮嬪寲visited
    3    visited := map[string]bool{}
    4    for _, w := range wordList {
    5        visited[w] = false
    6    }
    7    que := []string{beginWord}
    8    dep := 1
    9  //閬嶅巻鎵€鏈夊厓绱?/span>
    10    for len(que) != 0 {
    11        curSize := len(que)
    12        for i := 0; i < curSize; i++ {
    13            top := que[0]
    14            que = que[1:]
    15            if top == endWord {
    16                return dep
    17            }
    18      //鍒ゆ柇鑳借繛鎺ョ殑瀛楃涓?/span>
    19            for c := 0; c < len(top); c++ {
    20                for j := 'a'; j <= 'z'; j++ {
    21                    newWord := top[:c] + string(j) + top[c+1:]
    22                    if visited[newWord] == false {
    23                        que = append(que, newWord)
    24                        visited[newWord] = true
    25                    }
    26                }
    27            }
    28        }
    29        dep++
    30    }
    31    return 0
    32}

    涓夈€佹€荤粨


    鍑洪鐐?/span>锛?/span>BFS鐨勬櫘閫傞鍨嬩竴鍏辨槸涓夌锛氭爲鐨勫眰娆¢亶鍘嗭紝鍥剧殑鏈€鐭矾寰勶紝瀛楃涓插尮閰嶆渶灏戞鏁般€傛壘鍑嗗叧閿瓧鈥滄渶鐭矾寰勨€濓紝鈥滃眰娆¢亶鍘嗏€濄€?/span>

    妯℃澘璁板繂锛?/span>姘寸汗娉㈠姩鏈夎寰嬶紝灞傛閬嶅巻灞傚眰娓咃紙cursize锛寁isited锛夛紝鎵惧噯鐗规畩浣嶇疆鐐癸紙澧欙紝缁堢偣锛屾槸鍚﹂亶鍘嗚繃锛夛紝鍒ゆ柇鏉′欢鏈夊厛鍚庯紙鐗规畩鐐瑰垽鏂厛鍚庨『搴忥級銆?/span>


    鎬濊矾锛?/span>鎷垮埌棰樼洰锛屾垜浠鍏堝彲浠ユ崟鎹夊叧閿瘝锛屼竴鏃︾湅鍒版湁鈥滄渶鐭矾寰勨€濄€佲€滃眰娆¢亶鍘嗏€濊繖绉嶈瘝璇紝閭d箞鎴戜滑搴旇鎯冲埌BFS銆備絾鏄湁鏃跺€欓鐩細闅愯棌杩欑鏆撮湶璇彞锛屼緥濡傚崟璇嶆帴榫欎竴鏍凤紝杩欐椂鎴戜滑闇€瑕佹娊璞″畠鐨勬湰璐紝鑳藉惁灏嗘瘡涓€涓瓧绗︿覆鐪嬩綔涓€涓妭鐐硅繘琛岃繛鎺ャ€傞渶瑕佹敞鎰忕殑鏄紝鍦ㄩ亶鍘嗘椂鎴栬浼氭湁閲嶅璺緞鐨勫彲鑳斤紝杩欐椂涓嶈蹇樹簡璁緑isted鐨勫蹇樺綍銆傚悓鏃讹紝鎴戜滑闇€瑕佹敞鎰忛殰纰嶇墿锛岃竟鐣屽€硷紝缁堢偣浣嶇疆鐨勫厛鍚庡垽鏂€?/span>

    鏄撻敊鐐?/span>锛?/span>寰幆闃熷垪涓妭鐐圭敤curSize璁板綍褰撳墠闃熷垪闀垮害锛岃€屼笉鏄敤len(que)銆?/span>


    鎰熻阿浣犵殑鐐硅禐鍜?span>鍦ㄧ湅鍝


    以上是关于的主要内容,如果未能解决你的问题,请参考以下文章

    谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

    片段和活动之间的核心区别是啥?哪些代码可以写成片段?

    VSCode自定义代码片段——.vue文件的模板

    VSCode自定义代码片段6——CSS选择器

    VSCode自定义代码片段——声明函数

    VSCode自定义代码片段8——声明函数