LeetCode---Counting Bits解题分析
2016-06-04 15:09
246 查看
题意描述:给定一个非负整数num,则返回区间[0,num]中每个数字对应的二进制中1的个数。比如“num=5”,返回[0, 1, 1, 2, 1, 2]
解题思路一:这里借鉴“Number of 1 Bits”的解法,一个函数实现计算数字的二进制形式中1的个数,然后在另一个函数中调用进而求出区间内每个数字的二进制形式中1的个数
解题思路一:这里借鉴“Number of 1 Bits”的解法,一个函数实现计算数字的二进制形式中1的个数,然后在另一个函数中调用进而求出区间内每个数字的二进制形式中1的个数
public int NumbersOf1Bits(int n) { int count = 0; while(n != 0){ count++; n = n & (n-1);//把一个数字与该数字减去1后再与,就会将二进制形式的最后一位1转化为0,有多少个1进行多少次操作即可 } return count; }
public int[] countBits(int num) { int[] result = new int[num+1]; for(int i=0; i<result.length; i++) result[i] = NumbersOf1Bits(i); return result; }解题思路二:解法一的思路对于数字K并没有运用数字K之前的结果进行求解,而是每个数字都单独计算。而对于2^N的数,末尾N-1位的重复规律,正好等于前N-1个数的重复规律,利用这一特点只需要加1即可
int[] result = new int[num+1]; result[0] = 0; int base = 1; while(base <= num){ int next = base * 2; for(int i=base; i<next && i<= num; i++) result[i] = result[i-base]+1; base = next; } return result; }
相关文章推荐
- myBatis查询dao的循序
- Java中StringBuffer类append方法的使用
- Mysql命令
- LCA(lowest common ancestor)问题
- 2440 lcd10分钟休眠修改
- 信号量互斥编程
- 箭无虚发
- php实习(四)
- c++ string split分割字符串
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 编程规范 --- 代码编辑、编译、审查
- MFC apps must not #include <windows.h>
- 在windows下安装scala出现错误:找不到或无法加载主类 scala.tools.nsc.MainGenericRunner
- 【算法学习】快包算法
- 牛腩新闻发布系统
- 子页面是iframe框架中 子页面改变父页面的值
- Mariadb
- hdu 2894 DeBruijin【Dfs】
- 一、百度Iot第一印象
- Java删除文件夹和文件