给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num =1775(110111011112)
输出:8
示例 2:
输入: num =7(01112)
输出:4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-bits-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
intlong_cont_one(int*data,int length){//1.double pointerint first =0;int second =0;int ret =0;while(first<length){if(data[first]==1){
second = first;while((second<length)&&(data[second]==1))
second++;int temp_length = second-first;if(temp_length>ret)
ret = temp_length;if(second==length)break;else
first = second;}else{
first++;}}return ret;}intreverseBits(int num){//1.convert the integer to binary//only for positive intif(num ==-2147483648)return2;int neg_flag=0;int t = num;if(num<0){
t =-num;
neg_flag =1;}int b[32];int i =31;int j =0;for(j=0;j<32;j++)
b[j]=0;while(t!=0){int re = t%2;
b[i]= re;
t = t/2;
i--;}if(neg_flag==1){//1.1negatefor(i=0;i<32;i++){if(b[i]==0)
b[i]=1;else
b[i]=0;}//1.2add oneint add_one_flag=0;for(i=31;i>-1;i--){int temp = add_one_flag+b[i];if(i==31)
temp++;if(temp==2){
b[i]=0;
add_one_flag=1;}else{
b[i]=temp;
add_one_flag=0;}}}/*
char str[32];
itoa(num,str,2);
int b[32];
int i = 0;
for(i=0;i<32;i++){
b[i] = str[i]-'0';
}
*///2.Traverse: Set ont bit to 1 at a time and find the longest continuous 1
i =0;int ret =0;int first_meet_one =0;int len =32;int temp_len =0;for(i=0;i<len;i++){if(b[i]==0){
b[i]=1;
temp_len =long_cont_one(b,len);
b[i]=0;}else{if(first_meet_one ==0){
first_meet_one =1;
temp_len =long_cont_one(b,len);}//else: do nothing}if(temp_len>ret)
ret = temp_len;}return ret;}