进制转换问题
问题描述
给定一个正整数 n,找到并返回 n 的二进制表示中两个相邻1之间的 最长距离 。如果不存在两个相邻的1。返回 0。
思路
个人比较倾向于找到测试用例的二进制的1所在位置存储到数组中,再计算数组中相邻两个数字的差值找最大即可。
程序
public:
int binaryGap(int n) {
int cnt = 0, max = 0;
int shuzu[36] = {0};
for (int i = 0;n != 0;i++) {
if (n & 1) {
shuzu[cnt] = i;
cnt++;
}
n >>= 1;
}
for (int i = 1;i < 36;i++) {
if (shuzu[i] - shuzu[i - 1] > max) {
if (shuzu[i] - shuzu[i - 1] < 0) {
max = shuzu[i - 1] - shuzu[i];
}
else {
max = shuzu[i] - shuzu[i - 1];
}
}
}
return max;
}
代码解析
- 分配内存分别用来给数组和记录最大值
- 计算二进制数中1的位置,给数组
- 计算数组的相邻最值