7月22日:字节笔试题:
给定一个正整数n,求1到n所有正整数的二进制表示中1的个数和(leetcode上的原题,略有改动)

参考:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/solution/mian-shi-ti-43-1n-zheng-shu-zhong-1-chu-xian-de-2/

内心慌乱,当场未能想出来,如何修改~
想过后:来补一补。
class Solution:
    def countDigitOne(self, n) :
        digit, res = 1, 0
        high, cur, low = n // 2, n % 2, 0
        while high != 0 or cur != 0:
            if cur == 0: 
                res += high * digit
            else: 
                res += high * digit + low + 1
            
            low += cur * digit
            cur = high % 2
            high //= 2
            digit *= 2
        return res
if __name__  == '__main__':        
    n = 5
    sol = Solution()
    end = sol.countDigitOne(n)
    print(end)
全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务