我想的是模拟:
class Solution {
public:
string func(string a){
string b="";
for(auto j :a){
if(j=='0') b+='1';
else b+='0';
}
reverse(b.begin(),b.end());
return b;
}
char findKthBit(int n, int k) {
string a="0";
while(a.size()<k){
a=a+'1'+func(a);
}
return a[k-1];
}
};
能过,但是效果不好。
应该采用dfs,完全没想到。
class Solution {
public:
char invert(char c){
return c=='0'?'1':'0';
}
char findKthBit(int n, int k) {
int length=pow(2,n)-1;
cout<<length<<endl;
if(n==1) return '0';
if(k==(length+1)/2) return '1';
else{
if(k>(1+length)/2)
return invert(findKthBit(n-1,length-k+1));
else
return findKthBit(n-1,k);
}
return '0';
}
};