Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
输入n,输出从0~n每个数二进制表示的1的数量
O(n)复杂度的方法比较巧妙:1000..0这样的数1的数量一定是1,所以某个数i的1的含1数量等于1(首位)+(i-p)的含1数量,p为与i位数相等的1000...0的十进制表示


 1 #338
 2 #Runtime: 52 ms (Beats 71.57%)
 3 #Memory: 17.3 MB (Beats 36.53%)
 4 
 5 class Solution(object):
 6     def countBits(self, n):
 7         """
 8         :type n: int
 9         :rtype: List[int]
10         """
11         ans = [1] * (n + 1)
12         ans[0] = 0
13         for i in range(1, n + 1):
14             if (i & (i-1)) == 0:
15                 p = i
16             else:
17                 ans[i] = 1 + ans[i - p]
18         return ans

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理