题目描述
有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)
给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。
测试样例:
2
返回:[1,4]
import java.util.*;
public class CloseNumber {
public int[] getCloseNumber(int x) {
// write code here
if(x<=0) return null;
int res[] = new int[2];
res[0] = getPre(x);
res[1] = getNext(x);
return res;
}
public int getNext(int x){
int c0 = 0; //尾部连续零的个数
int c1 = 0;
int t = x;
while((t&1)==0){
++c0;
t = t>>1;
}
while((t&1)==1){
++c1;
t = t>>1;
}
x = x + (1<<c0) + (1<<(c1-1)) - 1;
return x;
}
public int getPre(int x){
int c1 = 0; //尾部连续一的个数
int c0 = 0;
int t = x;
while((t&1)==1){
++c1;
t = t>>1;
}
while((t&1)==0){
++c0;
t = t>>1;
}
x = x - (1<<c1) - (1<<(c0-1)) + 1;
return x;
}
}