LeetCode338.比特位计数
先以2,3为例,它们的二进制分别是10、11,可以看到,忽略其二进制中最高位的1之后,这组数中二进制位为1的数量分别和数字0,1中二进制位为1的数量相同,再以4,5,6,7为例,他们的二进制分别是100、101、110、111,忽略其二进制中最高位的1之后,这组数中二进制位为1的数量分别和数字0,1,2,3中二进制位为1的数量相同,至此可以得出规律:
res[i+j]=res[j]+1;其中
i
为2
的幂次数(2,4,8
等等),j
的取值范围是[0,i);
class Solution { public int[] countBits(int n) { if(n==0) return new int[]{0}; if(n==1) return new int[]{0,1}; int[] res = new int[n+1]; res[0]=0;res[1]=1; for(int i=2;i<=n;){ for(int j=0;j<i;j++){ if(i+j<=n){ res[i+j]=res[j]+1; }else{ break; } } i=2*i; } return res; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix