leetcode-476. Number Complement
476. Number Complement
Example 1:
Input: 5 Output: 2 Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1 Output: 0 Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
求一个数的补码。
public class Solution { private int getPow(int x,int y){ int a=1; for(int i=0;i<y;i++){ a*=x; } return a; } public int findComplement(int num) { int sum=0; if(num==0){ return 1; } if(num>0){ int i=0; while(num!=0){ if(num%2==1){ i++; }else{ sum=sum+getPow(2,i); i++; } num/=2; } } return sum; } }
另一种解法:
举个例子:
100110, 它的补码是 011001, 和是 111111. 所以我们先求和num的二进制长度相同全为一的数,然后做减法
public int findComplement(int num) { int i = 0; int j = 0; while (i < num) { i += Math.pow(2, j); j++; } return i - num; }