LeetCode初級算法--其他01:位1的個數(shù)
搜索微信公眾號:'AI-ming3526'或者'計算機(jī)視覺這件小事' 獲取更多算法诵叁、機(jī)器學(xué)習(xí)干貨
csdn:https://blog.csdn.net/baidu_31657889/
csdn:https://blog.csdn.net/abcgkj/
github:https://github.com/aimi-cn/AILearners
一雁竞、引子
這是由LeetCode官方推出的的經(jīng)典面試題目清單~
這個模塊對應(yīng)的是探索的初級算法~旨在幫助入門算法。我們第一遍刷的是leetcode推薦的題目拧额。
查看完整的劍指Offer算法題解析請點擊github鏈接:
github地址
二碑诉、題目
編寫一個函數(shù),輸入是一個無符號整數(shù)势腮,返回其二進(jìn)制表達(dá)式中數(shù)字位數(shù)為 ‘1’ 的個數(shù)(也被稱為漢明重量)联贩。
示例1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進(jìn)制串 00000000000000000000000000001011 中,共有三位為 '1'捎拯。
示例2:
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進(jìn)制串 00000000000000000000000010000000 中泪幌,共有一位為 '1'盲厌。
示例3:
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進(jìn)制串 11111111111111111111111111111101 中,共有 31 位為 '1'祸泪。
提示:
- 請注意吗浩,在某些語言(如 Java)中,沒有無符號整數(shù)類型没隘。在這種情況下懂扼,輸入和輸出都將被指定為有符號整數(shù)類型,并且不應(yīng)影響您的實現(xiàn)右蒲,因為無論整數(shù)是有符號的還是無符號的阀湿,其內(nèi)部的二進(jìn)制表示形式都是相同的。
- 在 Java 中瑰妄,編譯器使用二進(jìn)制補碼記法來表示有符號整數(shù)陷嘴。因此,在上面的 示例 3 中间坐,輸入表示有符號整數(shù) -3灾挨。
進(jìn)階:
如果多次調(diào)用這個函數(shù),你將如何優(yōu)化你的算法竹宋?
1劳澄、思路
提供三種解法,調(diào)用函數(shù)懶蛋法蜈七;手動循環(huán)計算 1 的個數(shù)秒拔;十進(jìn)制轉(zhuǎn)二進(jìn)制的方式。每次對 2 取余判斷是否是 1飒硅,是的話就 count = count + 1溯警。詳情看代碼~
2、編程實現(xiàn)
python
class Solution(object):
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
#解法一:調(diào)用函數(shù)懶蛋法
return bin(n).count('1')
#解法二:手動循環(huán)計算 1 的個數(shù)狡相。
# n = bin(n)
# count = 0
# for c in n:
# if c == "1":
# count += 1
# return count
#解法三:十進(jìn)制轉(zhuǎn)二進(jìn)制的方式。每次對 2 取余判斷是否是 1食磕,是的話就 count = count + 1尽棕。
# count = 0
# while n:
# res = n % 2
# if res == 1:
# count += 1
# n //= 2
# return count
AIMI-CN AI學(xué)習(xí)交流群【1015286623】 獲取更多AI資料
分享技術(shù),樂享生活:我們的公眾號計算機(jī)視覺這件小事每周推送“AI”系列資訊類文章彬伦,歡迎您的關(guān)注滔悉!
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!