本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!
第13道问题 剑指offer 15为一道简单题
题目:
力扣https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
1.自己思路
转化成字符串,每一位进行一次对比,看包含多少个1.
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
String s =Integer.toBinaryString(n);//这里需要注意下,题目中输入得为10机制
int count=0;
char[] ch =s.toCharArray() ;
for(int i=0;i<s.length();i++){
if (ch[i]=='1'){
count++;
}
}
return count;
}
}
结果
2.查看官方题解
利用 按位与运算 1&0=0.
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count=0;
for(int i=0;i<32;i++){
if ((n & (1 << i)) != 0){
//1<<i 左移,每移动一位该位上为1,若n得位为1,不为0. 原理:1&0=0
count++;
}
}
return count;
}
}
结果:
总结:
1.计算机<<以及>>运算效率高,且执行快。
2.1&0=0.