您的位置:首页 > 其它

最接近的数

2016-06-22 15:34 204 查看


题目描述

有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)

给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。
测试样例:

2

返回:[1,4]

思路:以给出的数为基础,先将给出的数的二进制中有几个1判断出来,然后再分别判别当前数左边右边的数是否二进制中的1也和当前数一样

代码如下:

public int[] getCloseNumber(int x) {
int[] ss =new int[2];
int num = getNum(x);
int left =x - 1;
int right = x + 1;
while(left >0){
if(num == getNum(left)){
break;
}
left--;
}
ss[0] = left;
while(true){
if(num == getNum(right)){
break;
}
right++;
}
ss[1] = right;
return ss;
}
public int getNum(int x) {
int count = 0;
while(x>0){
if((x&1)!=0){
count++;
}
x>>=1;
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: