338. Counting Bits
来源:互联网 发布:淘宝主图视频内存大小 编辑:程序博客网 时间:2024/06/05 09:13
Problem
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.
Example:
For num = 5 you should return [0,1,1,2,1,2].
Solution
首先寻找结果的模式或者规则
index:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
num: 0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4
Obviously, this is overlap sub problem, and we can come up the DP solution. For now, we need find the function to implement DP.
dp[0] = 0;
dp[1] = dp[0] + 1;
dp[2] = dp[0] + 1;
dp[3] = dp[1] +1;
dp[4] = dp[0] + 1;
dp[5] = dp[1] + 1;
dp[6] = dp[2] + 1;
dp[7] = dp[3] + 1;
dp[8] = dp[0] + 1; …
This is the function we get, now we need find the other pattern for the function to get the general function. After we analyze the above function, we can get dp[0] = 0;
dp[1] = dp[1-1] + 1;
dp[2] = dp[2-2] + 1;
dp[3] = dp[3-2] +1;
dp[4] = dp[4-4] + 1;
dp[5] = dp[5-4] + 1;
dp[6] = dp[6-4] + 1;
dp[7] = dp[7-4] + 1;
dp[8] = dp[8-8] + 1; ..
class Solution {public: vector<int> countBits(int num) { vector<int> ret(num+1,0); int offset = 1; for(int i = 1;i<=num;++i) { if(2*offset == i) offset *=2; ret[i] = ret[i-offset]+1; } return ret; }};
暴力法:
class Solution {public: vector<int> countBits(int num) { vector<int> ret; for(int i = 0;i<=num;++i) { ret.push_back(countBitsInSingleNum(i)); } return ret; } int countBitsInSingleNum(int n) { int count = 0; while(n != 0) { if(n&1) ++count; n = n>>1; } return count; }};
- [leetcode] 338. Counting Bits
- 338. Counting Bits
- leetcode 338. Counting Bits
- LeetCodeOJ:338. Counting Bits
- [LeetCode]338. Counting Bits
- LeetCode#338. Counting Bits
- 338. Counting Bits
- [LeetCode] 338. Counting Bits
- LeetCode 338. Counting Bits
- 338. Counting Bits
- [LeetCode]338. Counting Bits
- LeetCode-338. Counting Bits
- LeetCode *** 338. Counting Bits
- 338. Counting Bits
- (leetcode) 338. Counting Bits
- Swift 338. Counting Bits
- #leetcode#338. Counting Bits
- LeetCode 338. Counting Bits
- DAY8
- JAVA基础知识IO流(文本文件读取方式一)
- Android开发中adb启动失败adb连接异常的解决办法
- Spring JDBCの紹介
- 牛腩新闻发布系统——静态方法使用问题(Static)
- 338. Counting Bits
- Process, program, thread 的区别
- Vector 线程安全与不安全
- poj-3050-Hopscotch
- 【办公采购系统】系统中遇到的问题汇总(一)——模板页使用
- oj数据结构题谜之输出格式
- 华为老总推荐的文章
- googletest mock设置 编译器选项 vs下
- 搜索算法11之1016