子集生成與字典序

2022-08-19 13:36:09 字數 798 閱讀 3497

題目描述

請編寫乙個方法,返回某集合的所有非空子集。

給定乙個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 返回 先按公...