//写一个函数,n代表二进制数字的长度,m代表二进制数字中1的个数,返回所有符合条件的数
//例如:m=4,n=2,返回12(1100),10(1010),6(0110),9(1001),5(0101),3(0011)
#include<bits/stdc++.h>
using namespace std;
vector<int> ans;
//方法一
void dfs(int n, int m, int tmp){
if(m == 0 && n == 0){
ans.push_back(tmp);
return;
}
if(m < 0 || n < m) return;
int tmp_ = tmp;
tmp = ((tmp << 1) | 1);
dfs(n - 1, m - 1, tmp);
tmp = tmp_;
tmp = (tmp << 1);
dfs(n - 1, m, tmp);
}
//方法二
vector<int> fun(int n,int m){
//4 2 1100 1010 1001 0110 0011 0101
// 12 10 9 6 3 5
if(m==0) return {0};
else if(m==n) return {((1<<m)-1)};
else{
vector<int> v;
for(int i:fun(n-1,m)) v.push_back(i*2);
for(int i:fun(n-1,m-1)) v.push_back(i*2+1);
return v;
}
}
void print(vector<int>& arr){
for(auto i : arr){
cout<< i <<" ";
}
cout<<endl;
}
vector<int> fun(int n, int m){
dfs(n, m, 0);
return ans;
}
int main(){
vector<int> vec = fun(4, 2);
print(vec);
return 0;
}
n代表二进制数字的长度,m代表二进制数字中1的个数,返回所有符合条件的数
猜你喜欢
转载自blog.csdn.net/qq_24624539/article/details/108519124
今日推荐
周排行