leetcode 401 401 二進位制手錶

2021-10-22 17:37:21 字數 3539 閱讀 7368

難度簡單232收藏分享切換為英文接收動態反饋

二進位制手錶頂部有 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"]

暴力遞迴法

from typing import list

class

solution

:def

readbinarywatch

(self, num:

int)

-> list[

str]

:"""

:type num: int

:rtype: list[str]

"""self.results =

# 0,1,2,3 代表小時

# 4 5 ..., 8, 9 代表分鐘

self.nums =[1

,2,4

,8,1

,2,4

,8,16

,32] self.length =

len(self.nums)

# 當前 表盤的數字被選擇,被選擇標記為1,沒有被選擇標記為0;

# [0,,3]表示小時, [4,,,9]表示分鐘

self.choice =[0

]* self.length

self._generate(num,0,

0)return self.results

def_generate

(self, num:

int, level:

int, start:

int)

:# terminator

if level == num:

)return

for i in

range

(start,

len(self.nums)):

self.choice[i]=1

ifnot self._is_valid_time(self.choice)

:# 不滿足條件,後面的數字不用繼續看了, 同時把當前結果是為零

self.choice[i]=0

continue

# drill down

self._generate(num, level +

1, i +1)

# revert the current level status

self.choice[i]=0

def_is_valid_time

(self, visited)

->

bool

:"""

是否滿足時間的 限制 ,滿足返回true, 不滿足返回false

:param visited:

:return:

"""sum_h =

0 sum_m =

0for i in

range

(len

(visited)):

if visited[i]==0

:continue

if i <4:

sum_h += self.nums[i]

else

: sum_m += self.nums[i]

return

0<= sum_h <=

11and

0<= sum_m <=

59def

_convert_time

(self, choice)

: sum_h =

0 sum_m =

0for i in

range

(self.length)

:if choice[i]==0

:continue

if i <4:

sum_h += self.nums[i]

else

: sum_m += self.nums[i]

result =""+

str(sum_h)

+":"

if sum_m <10:

result +=

"0"+

str(sum_m)

else

: result +=

str(sum_m)

return result

if __name__ ==

'__main__'

: r = solution(

).readbinarywatch(num=1)

print

(r)pass

直接根據 數字獲取對應二進位制1 的數量, 如果數量為 num 那麼就是要求的解, 然後在轉成時間格式即可。

class

solution

:def

readbinarywatch

(self, num:

int)

-> list[

str]

:"""

:type num: int

:rtype: list[str]

"""results =

for i in

range(0

,12):

for j in

range(0

,60):

if self._hammingweight(i)

+ self._hammingweight(j)

== num:

r ="%d"

% i +

":"+

"%02d"

% jreturn results

def_hammingweight

(self, n:

int)

->

int:

""" 獲取n 對應二進位制1的個數

:param n:

:return:

"""count =

0while n:

# print(bin(n))

count +=

1 n = n & n -

1return count

分享快樂,留住感動. '2021-03-20 21:30:56' --fran

Leetcode(二) 移除元素

給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。因為在刪除元素的過程中,陣列的長度一直在改...

Leetcode(三) 陣列(二)

162.尋找峰值 class solution return left 228.彙總區間 class solution int start nums 0 int end nums 0 vectorres for int i 1 i to string end start nums i end sta...

LeetCode題解精選(二)

69 x的平方根 方法彙總,這篇部落格寫的不錯,其實記住牛頓迭代和二分就行 此處貼上牛頓迭代的遞迴方法和迭代方法,不過個人感覺此處有些不恰當,就是浮點數的比較不宜使用 應該定義乙個精度eps 1e 6,做差比較fabs 絕對值 與eps大小 class solution public double ...