位运算第二弹
力扣191.位1的个数
public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int ret=0;while(n!=0){n=(n&n-1);ret++;}return ret;} }
推荐是自己去手动推一下,深刻理解一下,什么叫做最右侧的1。
力扣338.比特位计数
public static int[] countBits(int n) {int[]a=new int[n+1];a[0]=0;for(int i=1;i<=n;i++){int ret=0;int m=i;while(m!=0){m=(m&m-1);ret++;}a[i]=ret;}return a;}
首先是审题,他是要把从0-n位置,所以的都计算一遍有多少个1,那他的本质还是位1的个数,只是说有了多个数字。本质还是位运算,然后我们使用m&m-1把整个二进制数都消为0。
力扣461.汉明距离
这个我在看那个给的二进制,我首先在想他们两个有没有什么联系,所以说他要求的是两个相同的不算,只看不同的位置,这时候想到异或,因为,异或不同是1,然后计算不同位置的数目,所以此时又回变成位1的个数。
力扣面试题01.01判定字符串是否唯一
public static boolean isUnique(String astr) {char[]m=astr.toCharArray();int[]ret=new int[26];for(int i=0;i<m.length;i++){ret[m[i]-'a']++;}for (int i=0;i<26;i++){if(ret[i]>1){return false;}}return true;}
模拟一个哈希表,然后把String类型转toCharArray(),转成一个字符数组,用哈希表存储这个数组,然后判断存储的是否有大于1的