174 338 位元位計數

2022-06-05 08:36:07 字數 1967 閱讀 3420

昨天的題不是不是很難,都會有自己的解法.

class solution(object):

def countbits0(self, num: int):

"""暴力統計"""

res =

for i in range(num + 1):

return res

def countbits1(self, num):

"""因為我發現當i是偶數時,和前乙個計算有關聯,那就是右移到當前數不是偶數時的次數就是上一次需要少掉的1的次數,同時加上這次的1

:type num: int

:rtype: list[int]

"""if not num:

return [0]

pre_list = [0 for _ in range(num + 1)]

pre_list[1] = 1

for i in range(2, num + 1):

count = 0

if not i & 1:

c = i

while not (c & 1):

# 統計需要減掉1的個數

count -= 1

# 右移

c >>= 1

# 更新i位置的值

pre_list[i] = pre_list[i-1] + count + 1

return pre_list

def countbits2(self, num: int):

def countones(x: int) -> int:

ones = 0

while x > 0:

# x &= (x - 1) 當x=0的時候,&的次數就是x中1的個數

x &= (x - 1)

ones += 1

return ones

bits = [countones(i) for i in range(num + 1)]

return bits

def countbits3(self, num: int):

"""dp過程,計算i中的1的個數,可以改為bits[i - highbit] + 1,其中highbit就是比i小的,

2的次數放也就是 2 ** x = highbit < i, 這個時候bits[i - highbit] + 1就是他的值

"""bits = [0]

highbit = 0

for i in range(1, num + 1):

# 判斷是否是偶數,其實可以用i & 1

if i & (i - 1) == 0:

highbit = i

return bits

def countbits4(self, num: int):

"""如果i為偶數的時候,統計1的個數,這個時候i的二進位制最後一位必定是0,這個時候和i>>1的1的個數是相等;

如果i是奇數的時候,統計1的個數,這個時候可以給i-1它就變成了偶數,這個時候(i-1) >> 1 + 1和i中1的個數相等,為什麼+1,減一之後的補償

"""bits = [0]

for i in range(1, num + 1):

return bits

def countbits(self, num: int):

"""這個很有意思,它的意思是找比i最小的偶數,然後再它的bits結果上+1

因為是二進位制,所以你將前16位二進位制表示寫出來之後,你會發現乙個偶數的二進位制,總比後面(也就是比他大的數)兩個數少乙個1

"""bits = [0]

for i in range(1, num + 1):

return bits

if __name__ == '__main__':

s = 10

s1 = solution()

root = s1.countbits(s)

print(root)

位元位計數

一 題目描述 二 題目分析 題解參考 自己分析沒分析出來,看完題解,忍不住妙出了聲。對於數字有兩類,偶數與奇數,從二進位制的角度看,奇數的二進位制標示肯定比前面乙個偶數多1,因為偶數的最低為0,而因為最低為為0,則讓乙個偶數的二進位制1的個數一定和自身除以2後的二進位制1的個數相等。通過上面這兩個特...

位元位計數

位元位計數 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。題解 這種題如果不加限制的話可以選擇移位 1的方式計算1的個數 但是要求是在o n 的時間複雜度下完成就需要腦筋急轉彎啦 0000 0 0001 1 0000 00...

位元位計數

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 1.暴力法 intisbinary int n return count int cou...