2019-02-25 goland實(shí)現(xiàn)打開(kāi)轉(zhuǎn)盤(pán)鎖

題目:

你有一個(gè)帶有四個(gè)圓形撥輪的轉(zhuǎn)盤(pán)鎖。每個(gè)撥輪都有10個(gè)數(shù)字:?'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'?臀脏。每個(gè)撥輪可以自由旋轉(zhuǎn):例如把?'9'?變?yōu)?'0'虏冻,'0'?變?yōu)?'9'?肤粱。每次旋轉(zhuǎn)都只能旋轉(zhuǎn)一個(gè)撥輪的一位數(shù)字。

鎖的初始數(shù)字為?'0000'?厨相,一個(gè)代表四個(gè)撥輪的數(shù)字的字符串领曼。

列表?deadends?包含了一組死亡數(shù)字,一旦撥輪的數(shù)字和列表里的任何一個(gè)元素相同蛮穿,這個(gè)鎖將會(huì)被永久鎖定庶骄,無(wú)法再被旋轉(zhuǎn)。

字符串?target?代表可以解鎖的數(shù)字践磅,你需要給出最小的旋轉(zhuǎn)次數(shù)单刁,如果無(wú)論如何不能解鎖,返回 -1府适。


示例 1:

輸入:deadends = ["0201","0101","0102","1212","2002"], target = "0202"輸出:6解釋:可能的移動(dòng)序列為 "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202"羔飞。注意 "0000" -> "0001" -> "0002" -> "0102" -> "0202" 這樣的序列是不能解鎖的,因?yàn)楫?dāng)撥動(dòng)到 "0102" 時(shí)這個(gè)鎖就會(huì)被鎖定檐春。

示例 2:

輸入:deadends = ["8888"], target = "0009"輸出:1解釋:把最后一位反向旋轉(zhuǎn)一次即可 "0000" -> "0009"逻淌。

示例 3:

輸入:deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"], target = "8888"輸出:-1解釋:無(wú)法旋轉(zhuǎn)到目標(biāo)數(shù)字且不被鎖定。

示例 4:

輸入:deadends = ["0000"], target = "8888"輸出:-1


提示:

死亡列表?deadends?的長(zhǎng)度范圍為?[1, 500]疟暖。

目標(biāo)數(shù)字?target?不會(huì)在?deadends?之中恍风。

每個(gè)?deadends?和?target?中的字符串的數(shù)字會(huì)在 10,000 個(gè)可能的情況?'0000'?到?'9999'?中產(chǎn)生。




goland代碼:

func openLock(deadends []string, target string) int {

? ? deadendsMap := make(map[string]bool)

? ? for _, v := range deadends {

? ? ? ? ? ?if v == "0000" {

? ? ? ? ? ? ? ? ? return -1

? ? ? ? ? ? }

? ? ? ? deadendsMap[v] = true

? ? ? }

? ? ? return bfs(deadendsMap, target)

}

func bfs(deadendsMap map[string]bool, target string) int {

????start, step := "0000", 0

????tmp0, tmp9 := byte('0'-1), byte('9'+1)

????used := make(map[string]bool)

????used[start] = true

????queue := list.New()

????queue.PushBack(start)

????for queue.Len() > 0 {

????????l := queue.Len()

????????for i := 0; i < l; i++ {

????????????v, _ := queue.Remove(queue.Front()).(string)

? ? ? ? ? ? if deadendsMap[v] {

? ? ? ? ? ? ? ? continue

????????????}

? ? ? ? ? ? if v == target {

????????????????return step

????????????}

????????????tmpv_a := []byte(v)

? ? ? ? ? ? tmpv_b := []byte(v)

????????????for ti := 0; ti < 4; ti++ {

????????????????tmpv_a[ti]++

? ? ? ? ? ? ? ? tmpv_b[ti]--

????????????????if tmpv_a[ti] == tmp9 {

????????????????????tmpv_a[ti] = '0'

????????????????}

? ? ? ? ? ? ? ? if tmpv_b[ti] == tmp0 {

????????????????????tmpv_b[ti] = '9'

????????????????}

????????????????if !used[string(tmpv_a)] {

????????????????????queue.PushBack(string(tmpv_a))? ?

????????????????????used[string(tmpv_a)] = true

????????????????}

? ? ? ? ? ? ? ? if !used[string(tmpv_b)] {

????????????????????queue.PushBack(string(tmpv_b))

????????????????????used[string(tmpv_b)] = true

????????????????}

? ? ? ? ? ? ? ? tmpv_a[ti] = v[ti]

????????????????tmpv_b[ti] = v[ti]

????????????}

????????}

? ? ? ? step++

????}

????return -1

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市朋贬,隨后出現(xiàn)的幾起案子凯楔,更是在濱河造成了極大的恐慌,老刑警劉巖锦募,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摆屯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡糠亩,警方通過(guò)查閱死者的電腦和手機(jī)虐骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赎线,“玉大人廷没,你說(shuō)我怎么就攤上這事〈沽龋” “怎么了颠黎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滞项。 經(jīng)常有香客問(wèn)我狭归,道長(zhǎng),這世上最難降的妖魔是什么文判? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任过椎,我火速辦了婚禮,結(jié)果婚禮上戏仓,老公的妹妹穿的比我還像新娘疚宇。我一直安慰自己,他們只是感情好赏殃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布敷待。 她就那樣靜靜地躺著,像睡著了一般嗓奢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浑厚,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天股耽,我揣著相機(jī)與錄音,去河邊找鬼钳幅。 笑死物蝙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敢艰。 我是一名探鬼主播诬乞,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了震嫉?” 一聲冷哼從身側(cè)響起森瘪,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎票堵,沒(méi)想到半個(gè)月后扼睬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悴势,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年窗宇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特纤。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡军俊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捧存,到底是詐尸還是另有隱情粪躬,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布矗蕊,位于F島的核電站短蜕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏傻咖。R本人自食惡果不足惜朋魔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卿操。 院中可真熱鬧警检,春花似錦、人聲如沸害淤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窥摄。三九已至镶奉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間崭放,已是汗流浹背哨苛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留币砂,地道東北人建峭。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像决摧,于是被迫代替她去往敵國(guó)和親亿蒸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凑兰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,028評(píng)論 0 2
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,448評(píng)論 0 13
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面姑食,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語(yǔ)言砚蓬,java語(yǔ)言矢门,單片機(jī)的匯編語(yǔ)言等;大學(xué)畢...
    oceanfive閱讀 3,049評(píng)論 0 7
  • 一灰蛙、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,725評(píng)論 0 10
  • 1祟剔,楔子 我們終于還是連一句不咸不淡的問(wèn)候都沒(méi)有了。 ——題記 那個(gè)七月你走了摩梧,這個(gè)七月你又回來(lái)了物延。...
    嘴角的棉花糖閱讀 312評(píng)論 0 0