Java中的字符串和二进制字符串

时间:2014-08-04 21:31:28

标签: java string algorithm set

我正在尝试实现一个方法,该方法给出一个正整数n和一个数字k生成所有字符串,其中长度为n的1和2都恰好为k 2。

我已经为k = 2完成了如下操作:

static String[] stringgen()
{
    String[][] a = new String[7][21];
    String[] b = new String[21];
    for(int i = 0; i < 21; i++)
        b[i] = "";
    for(int j = 0; j < 7;j++)
        for(int i = 0; i < 21; i++)
            a[j][i] = "1";
    int j = 0;
    for(int k = 0; k < 7;k++)
    {
        String c = "";
        for(int i = k+1; i < 7; i++)
        {
            a[k][j]="2"; a[i][j]= "2";
            for(int l = 0; l<7;l++)
                b[j] = b[j]+a[l][j];
            j++;
        }
    }
    return b;
}

正如你所看到的,n是7而k是2所以该方法生成所有这样的字符串,但我想不出一种方法来做n = 7和k = 3这个问题。这个问题基本上等于找到n集的k个子集,我已经考虑过这样做,然后根据n个集合标记字符串,但这种方式似乎对我实际需要的东西来说有点低效。

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以以递归方式解决问题。在任何一步,如果你手中有2个,你可以把它放在那里。如果在任何阶段你已经使用了所有的K 2,那么只需填写1。

该想法的实施。代码未经过测试

void generateAllStrings(int len, int K, String str) {
    if(len == 0) {
        // base case
        // push string str to arrayList or use anywhere
        return;
    }

    if(K > 0) {
        generateAllStrings(len - 1, K - 1, str + '2'); // as we have positive number
                                                       // of 2 in hand, let's use one
    }

    if(len > K) {
        // len > K so we can place a 1 here if we want
        generateAllStrings(len - 1, K, str + '1'); // note K is not decreased here
    }
}