LeetCode初級演算法--其他01:位1的個數
搜索微信公眾號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多演算法、機器學習干貨
csdn:https://blog.csdn.net/baidu_31657889/
csdn:https://blog.csdn.net/abcgkj/
github:https://github.com/aimi-cn/AILearners
一、引子
這是由LeetCode官方推出的的經典面試題目清單~
這個模塊對應的是探索的初級演算法~旨在幫助入門演算法,我們第一遍刷的是leetcode推薦的題目,
查看完整的劍指Offer演算法題決議請點擊github鏈接:
github地址
二、題目
撰寫一個函式,輸入是一個無符號整數,回傳其二進制運算式中數字位數為 ‘1’ 的個數(也被稱為漢明重量),
示例1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位為 '1',
示例2:
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位為 '1',
示例3:
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1',
提示:
- 請注意,在某些語言(如 Java)中,沒有無符號整數型別,在這種情況下,輸入和輸出都將被指定為有符號整數型別,并且不應影響您的實作,因為無論整數是有符號的還是無符號的,其內部的二進制表示形式都是相同的,
- 在 Java 中,編譯器使用二進制補碼記法來表示有符號整數,因此,在上面的 示例 3 中,輸入表示有符號整數 -3,
進階:
如果多次呼叫這個函式,你將如何優化你的演算法?
1、思路
提供三種解法,呼叫函式懶蛋法;手動回圈計算 1 的個數;十進制轉二進制的方式,每次對 2 取余判斷是否是 1,是的話就 count = count + 1,詳情看代碼~
2、編程實作
python
class Solution(object):
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
#解法一:呼叫函式懶蛋法
return bin(n).count('1')
#解法二:手動回圈計算 1 的個數,
# n = bin(n)
# count = 0
# for c in n:
# if c == "1":
# count += 1
# return count
#解法三:十進制轉二進制的方式,每次對 2 取余判斷是否是 1,是的話就 count = count + 1,
# count = 0
# while n:
# res = n % 2
# if res == 1:
# count += 1
# n //= 2
# return count
AIMI-CN AI學習交流群【1015286623】 獲取更多AI資料
分享技術,樂享生活:我們的公眾號計算機視覺這件小事每周推送“AI”系列資訊類文章,歡迎您的關注!
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/65629.html
標籤:其他
