LeetCode 231. 2的幂 LeetCode 338. 比特位计数(2进制1的个数)
文章目录
- 1. 题目信息
- 2. 解题
- 拓展:求一个数n的2进制有多少个1?
- LeetCode 338
1. 题目信息
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:输入: 1
输出: true
解释: 20 = 1
示例 2:输入: 16
输出: true
解释: 24 = 16
示例 3:输入: 218
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-two
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 2的整数次幂的2进制数中只有1个1
- n经过
运算 n&(n-1)
得到的数的二进制1的个数减少1个
class Solution {public:bool isPowerOfTwo(int n) {if(n <= 0)return false;return (n&(n-1)) == 0;//错误写法 n&(n-1) == 0}
};
拓展:求一个数n的2进制有多少个1?
int count = 0, num = 8;
while(num)
{count++;num = num&(num-1);
}
std::cout << count << std::endl;
LeetCode 338
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
class Solution {public:vector<int> countBits(int num) {int count, temp;vector<int> ans;for(int i = 0; i <= num; ++i){count = 0;temp = i;while(temp){temp &= (temp-1);++count;}ans.push_back(count);}return ans;}
};
对338题还可以用动态规划
- dp[0] = 0
奇数 | 偶数 |
---|---|
1-‘01’-dp[1]=1 | 2-‘10’-dp[2]=1 |
3-‘11’-dp[3]=2 | 4-‘100’-dp[4]=1 |
5-‘101’-dp[5]=2 | 6-‘110’-dp[6]=2 |
7-‘111’-dp[7]=3 | 8-‘1000’-dp[8]=1 |
n为奇数,dp[n]=dp[n−1]+1n为奇数,dp[n] = dp[n-1]+1n为奇数,dp[n]=dp[n−1]+1,比前面的多1,好理解
n为偶数,dp[n]=dp[n/2]n为偶数,dp[n]=dp[n/2]n为偶数,dp[n]=dp[n/2],2的倍数,只需要移动位数就可以,1个数不变
class Solution {public:vector<int> countBits(int num) {vector<int> ans(num+1);ans[0] = 0;for(int i = 0; i <= num; ++i){if(i % 2 == 1){ans[i] = ans[i-1] + 1;}else{ans[i] = ans[i/2];}}return ans;}
};
LeetCode 231. 2的幂 LeetCode 338. 比特位计数(2进制1的个数)相关推荐
- Leetcode 338.比特位计数
Time: 20190904 Type: Medium 题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. ...
- leetcode 338. 比特位计数
给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...
- 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
文章目录 题目描述 思路 & 代码 无注释二刷 题目描述 难点在于 O(n) 思路 & 代码 理解题意,分析出 O(n) 复杂度应该是要用到之前的值来得到当前值--动态规划 核心结论: ...
- leetcode力扣338. 比特位计数
给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...
- leetcode 338 比特位计数
如果一个数i%2=1,即为奇数,即二进制中的最低位为1.我们将这个过程循环直至i为0,每一次i%2=1我们将该数的'1'数加一. 上面的方法不能做到复杂度O(n)完成所有数的的遍历.我们换成动态规划. ...
- LeetCode 338. 比特位计数(动态规划)
题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2 ...
- 力扣 338. 比特位计数
题目 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案. 示例 输入:n = 2 输 ...
- 338 比特位计数(动态规划-递推)
1. 问题描述: 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] ...
- 338. 比特位计数
题目描述:给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i,计算其二进制数中的 1 的数目并将它们作为数组返回. 解题思路:以2的幂次方为循环,如果当前数大于等于2的i次方 ...
最新文章
- swiftswift3.0自己封装的快速构建页面的方法
- 一口气说出四种幂等性解决方案,面试官露出了姨母笑~
- 以下哪一个不属于python语言的特点-以下不属于python语言特点的是( )_学小易找答案...
- 汇编语言基础知识摘要(《汇编语言》王爽)第 3 / 17 章
- 基础知识的学习,来自十年程序员的经验分享
- pytesseract:opencv预处理图片
- Spring与网关的集成
- ActiveX控件打包成Cab置于网页中自动下载安装
- substring 在C#,Javascript,SQL 中index开始值
- SQL 子查询怎么优化?写的很深!
- Matlab运算之 norm,cross,makehgtform,asin(acos)
- 盘点国内外私募基金业绩报酬计提方式
- 2019蓝桥:2019拆分为平方和问题
- 使用dea-toolbox进行数据包络分析
- 明源云客微信抢房技巧_明源演示 - 微信抢房_软件抢房_网上选房_手机抢房_代抢房 - 爱抢房...
- 小程序ibeacon三点定位
- Cibersort 算法 分析肿瘤样本免疫细胞组分
- Mysql 索引模型 B+ 树详解
- 【Linux】ab命令实现网站性能压力测试
- 北京外企 外服控股:人服国企借道资产重组上市