本文主要是介绍LeetCode476 NumberComplement,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目要求:The complement strategy is to flip the bits of its binary representation。
其实求得就是~num,可是java中int型需要32bit来表示,如果把num=5(101)直接取反,得到的是11111111111111111111111111111010,即把5之前的0也全部给取反了。所以我们需要得到5的二进制表示中,首个1出现的位置,所以用int mask = Integer.MAX_VALUE和num做与运算,每做一次,mask左移一位。当while循环结束的时候,mask左移了多少位,num的二进制就有多少位。
public int findComplement(int num) {int mask = Integer.MAX_VALUE;while((mask & num) != 0) mask <<= 1;//用于判断num第一位的位置。return ~mask & ~num;}
这篇关于LeetCode476 NumberComplement的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!