【刷穿剑指】剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
原题链接:剑指 Offer II 003. 前 n 个数字二进制中 1 的个数朴素解法:通过二进制运算,每次右移1位,并逐位对1作与运算即可求出这个数的1的个数进阶解法:通过 i & (i-1) 求1的个数。 考虑一个二进制数 i = 1100,则 i-1 = 1011,那么 i & (i-1) = 1000,此时就求出了一个为1的位,计数器加一,循环直到 i 为 0,循环次数即为该数二进制的 1 的个数。对于朴素解法,时间复杂度为 O(n*k),k 为二进制的位数;对于进阶解法,时间复杂度为 O(n*m)