題目描述請編寫乙個方法,返回某集合的所有非空子集。
給定乙個int陣列a和陣列的大小int n,請返回a的所有非空子集。保證a的元素個數小於等於20,且元素互異。各子集內部從大到小排序,子集之間字典逆序排序,見樣例。
測試樣例:
[123,456,789
]返回:
當陣列內的元素是字典序排列,則生成子集時用位向量法生成的子集也是按字典序生成的;
#include#include#include
#include
#include
#include
using
namespace
std;
int flag=0,cnt=0,a[100]=,num[10]=;
/*void print_set(int n,int cur,int *num)
printf("]
");cnt++;
return
; }
num[cur]=1
; print_set(n,cur+1,num,1
); num[cur]=0
; print_set(n,cur+1
,num,fleg);
}int
main()
sort(a,a+j+1,greater());
//printf("%d",a[0]);
printf("\n"
) ;
return0;
}
字典序與next permutation
求字典序的直觀方法就是從後往前不斷操作,讓乙個串越來越大,next permutation中給出了求字典序的方法,這個方法是 1 如果串是完全逆序的,它不能再大了 但仍把它反轉,使其成為最小串 2 如果串沒有完全逆序,它就還能變大,怎麼變大呢?如果最後兩個元素是順序的,把它們逆序這個串就變大了 如果...
子集生成詳解
演算法入門經典上面有三種子集生成的演算法,我發現有些演算法有些需要注意的地方,寫出來防止被坑。第一種是增量構造法 include int cnt 0 void print int a,int cur,int n int main void 第二種是位向量法 include 列印出來的不是字典序順序 ...
生成子集 subset
程式設計師面試金典 上面的一道題目,leetcode也有這道題 返回某集合的所有非空子集。給定乙個int陣列a和陣列的大小int n,請返回a的所有非空子集。保證a的元素個數小於等於20,且元素互異。各子集內部從大到小排序,子集之間字典逆序排序,見樣例。測試樣例 123,456,789 返回 先按公...