難度簡單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 ...