LeetCode-338. 比特位计数、318. 最大单词长度乘积
目录
338. 比特位计数
【题目】:
【代码】:
方法1:使用内置函数Integer.bitCount(i)来计算1的个数。
效果:
方法2和方法3都是利用前面已经算好的数来计算当前数的1的个数。
方法2:i >> 1会把最低位去掉,i >> 1 比i小的,是先于i算过的数。(i&1)取i的最低位,是0则加0,是1则加1。i中1的个数比(i>>1)的个数多(i&1)。
效果:
方法3:n&(n-1) 去除 n 的位级表示中最低的那一位。例如对于二进制表示 10110100,减去 1 得到 10110011,这两个数相与得到 10110000。所以i&(i-1)比i小,且i中1的个数比i&(i-1)的个数多1。
效果:
318. 最大单词长度乘积
【题目】:
【代码】:本题主要问题是判断两个字符串是否含相同字符,由于字符串只含有小写字符,总共 26 位,因此可以用一个 32 位的整数来存储每个字符是否出现过。将两个单词所对应的整数相与,为0则不含有相同的字母。
效果: