LeetCode初級算法--其餘01:位1的個數

LeetCode初級算法--其餘01:位1的個數

搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨python

csdn:https://blog.csdn.net/baidu_31657889/git

csdn:https://blog.csdn.net/abcgkj/github

github:https://github.com/aimi-cn/AILearners面試

1、引子

這是由LeetCode官方推出的的經典面試題目清單~
這個模塊對應的是探索的初級算法~旨在幫助入門算法。咱們第一遍刷的是leetcode推薦的題目。
查看完整的劍指Offer算法題解析請點擊github連接:
github地址算法

2、題目

編寫一個函數,輸入是一個無符號整數,返回其二進制表達式中數字位數爲 ‘1’ 的個數(也被稱爲漢明重量)。編程

示例1:微信

輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位爲 '1'。複製代碼

示例2:機器學習

輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位爲 '1'。複製代碼

示例3:函數

輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位爲 '1'。複製代碼

提示:學習

  • 請注意,在某些語言(如 Java)中,沒有無符號整數類型。在這種狀況下,輸入和輸出都將被指定爲有符號整數類型,而且不該影響您的實現,由於不管整數是有符號的仍是無符號的,其內部的二進制表示形式都是相同的。
  • 在 Java 中,編譯器使用二進制補碼記法來表示有符號整數。所以,在上面的 示例 3 中,輸入表示有符號整數 -3。

進階:

若是屢次調用這個函數,你將如何優化你的算法?

一、思路

提供三種解法,調用函數懶蛋法;手動循環計算 1 的個數;十進制轉二進制的方式。每次對 2 取餘判斷是不是 1,是的話就 count = count + 1。詳情看代碼~

二、編程實現

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 發佈!

相關文章
相關標籤/搜索