一、题目描述
有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)
给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。
测试
2
返回:[1,4]样例:
二、解题思路
1.如果求解比原数字较小的数,首先需要从左往右开始找到0出现后的第一个1出现的位置(因为求的是大小最接近,所以寻找0出现后的第一个1的位置o1),同时记录0-o1位置出现的1的个数numcout,并且将0-o1位置全部置零,然后将(o1-1)到(o1-numcount)全部置1,得到的就是要求的结果。
2.如果求解比原数字较大的数,首先从左往右开始找到1出现后的第一个0出现的位置z2,同时记录0-z2位置出现的1的个数numcount,并且将0-(z2-1)全部置零,然后将0-(numcount-2)全部置1,同时将z2置1;
以十进制数76351为例,它的二进制形式为
三、代码如下:
import java.util.*;
public class CloseNumber {
public int[] getCloseNumber(int x) {
// write code here
//int z1=0;
int z2=0;
int o1=0;
//int o2=0;
bool