思考过程:
- 十进制转二进制方法:除2取余,逆序排列
- 其实根本不需要计算出二进制数是什么,只要知道两个1相隔了多远即可。
- 设置count变量记录当前相隔距离,maxNum记录最大值。
- 设置flag变量记录是否为第一个1(特殊情况)
class Solution {
public:
int binaryGap(int N) {
//十进制转二进制
int temp = N,i = 0,count = 0,maxNum = 0,flag = 0;
while(temp>0){
int cur = temp % 2;
if(cur==1)
{
if(flag == 1)//flag标记是否是第一个1
{
count ++;
maxNum = max(maxNum,count);
}
else flag = 1;
maxNum = max(maxNum,count);
count = 0;
}
else if(cur == 0 && flag==1)
count++;
temp/=2;
}
maxNum = max(maxNum,count);
return maxNum ;
}
};
自己没写出来,贴一下参考的思路 ↓
递归,终止条件是 n = 0
&&运算符,前一个值为false时不会进行后一个值的运算
class Solution {
public:
int sumNums(int n) {
n&&(n += sumNums(n-1));
return n;
}
};