LeetCode 二進位制手錶

2021-09-12 22:35:06 字數 2038 閱讀 8443

二進位制手錶頂部有 4 個 led 代表小時(0-11),底部的 6 個 led 代表分鐘(0-59)。

每個 led 代表乙個 0 或 1,最低位在右側。

例如,上面的二進位制手錶讀取 「3:25」。

給定乙個非負整數 n 代表當前 led 亮著的數量,返回所有可能的時間。

案例:

輸入: n = 1

返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

注意事項:

輸出的順序沒有要求。

小時不會以零開頭,比如 「01:00」 是不允許的,應為 「1:00」。

分鐘必須由兩位數組成,可能會以零開頭,比如 「10:2」 是無效的,應為 「10:02」。

思路分析:

第一步:我們對於給定的亮的燈個數num進行分解,分成小時燈個數hourscnt、分鐘燈個數minscnt。

第二步:然後對小時燈個數hourscnt小時的情況進行構造。(比如,當hourscnt == 1,可以構造成小時為 1,2,4,8)

第三步:接著對分鐘燈個數minscnt分鐘的情況進行構造。(比如,當minscnt== 1,可以構造成分鐘為 1,2,4,8,16,32)

第四步:最後將小時的集合和分鐘集合進行搭配組合。

class

solution

//第二步:廣度優先搜尋hours亮hourscnt個燈的情況

queue<

int>

hoursque;

hoursque.

push(0

);//亮0個燈,只有一種情況

//從0個燈開始,每次將n - 1個燈的狀態再亮乙個燈,達到n個燈

for(

int cnt =

0; cnt < hourscnt;

++cnt)}}

}//第三步:廣度優先搜尋mins亮minscnt個燈的情況

queue<

int>

minsque;

minsque.

push(0

);//亮0個燈,只有一種情況

//從0個燈開始,每次將n - 1個燈的狀態再亮乙個燈,達到n個燈

for(

int cnt =

0; cnt < minscnt;

++cnt)}}

}//第四步:將小時的集合和分鐘集合進行搭配組合。

vector<

int>

hoursvec;

//將小時佇列轉換為vector容器

while

(!hoursque.

empty()

) vector<

int>

minsvec;

//將分鐘佇列轉換為vector容器

while

(!minsque.

empty()

)int hoursvecsize = hoursvec.

size()

, minsvecsize = minsvec.

size()

;//進行組合,每次去乙個小時元素,乙個分鐘元素

**雖然有些長,但是思路非常清晰。

二進位制手錶(LeetCode)

二進位制手錶頂部有 4 個 led 代表小時 0 11 底部的 6 個 led 代表分鐘 0 59 每個 led 代表乙個 0 或 1,最低位在右側。例如,上面的二進位制手錶讀取 3 25 給定乙個非負整數 n 代表當前 led 亮著的數量,返回所有可能的時間。案例 輸入 n 1 返回 1 00 2...

二進位制手錶

二進位制手錶頂部有 4 個 led 代表小時 0 11 底部的 6 個 led 代表分鐘 0 59 每個 led 代表乙個 0 或 1,最低位在右側。例如,上面的二進位制手錶讀取 3 25 給定乙個非負整數 n 代表當前 led 亮著的數量,返回所有可能的時間。案例 輸入 n 1 返回 1 00 2...

LeetCode 401 二進位制手錶

二進位制手錶頂部有 4 個 led 代表小時 0 11 底部的 6 個 led 代表分鐘 0 59 每個 led 代表乙個 0 或 1,最低位在右側。解題思路 我自己想到的解法是用dfs去搜尋滿足條件的組合,然後看完 william 用暴力解法,解法也比較好,這裡都記錄一下。先看自己的解法。我的解法...