生成powerset达到一定长度

时间:2012-08-03 20:59:15

标签: c++ string permutation

我正在使用bit-shift来生成给定数字字符串的powerset。如何将其限制在一定的长度,比如4,从而通过不查找不需要的长度的子序列来改善执行时间。

例如:如果给定数字字符串为10292,则只需要以下子序列:1029,102,109,029,0922等(仅限数字4,3,2,1)。

以下是我的代码:

scanf("%s", &str); //read numeric string
int n = strlen(str); //find size of string

// loop to find subsequences or powerset
for ( i = 1; i < ( 1 << n ); ++i ) {
    string subseq;
    for ( j = 0; j < n; ++j ) {
        if ( i & ( 1 << j ) ) {
            subseq+=str[j];
        }          
    }

    cout << subseq << endl; //print the subsequence
}

1 个答案:

答案 0 :(得分:0)

只需在print语句前放置一个过滤器。

if (subseq.length() <= 4) cout<<subseq<<endl;