我正在使用以下程序来打印所有可能的子序列

class Test {

    static void printSubSeqRec(String str, int n, int index, String curr) {
        if (index == n) {
            return;
        }
        System.out.println(curr);

        for (int i = index + 1; i < n; i++) {
            curr += str.charAt(i);
            printSubSeqRec(str, n, i, curr);

            curr = curr.substring(0, curr.length() - 1);
        }
    }

    static void printSubSeq(String str) {
        int index = -1;
        String curr = "";

        printSubSeqRec(str, str.length(), index, curr);
    }

    public static void main(String[] args) {
        String str = "24";
        printSubSeq(str);
    }

}


输出:

2
4
24

还有其他方法可以得到相同的结果吗?

最佳答案

为了解决这个问题,我想以给定的顺序生成以下几对索引。第一个元素是子字符串的开头,第二个元素是四个字符串的限制。

      [0,1], [1,2], [2,3], [3,4], [0,2], [1,3], [2,4], [0,3], [1,4], [0,4]


这是我想出的最简单的方法。

      String numb = "1234";
      for (int z = 1; z <= numb.length(); z++) {
         for (int k = z; k <= numb.length(); k++) {
            System.out.println(numb.substring(k - z, k));
         }
      }


如果要递归执行,则这是一种方法。

  String numb = "1234";
  subseq(numb, 0, 1, 1);

  public static void subseq(String v, int z, int k, int i) {
      System.out.println(v.substring(z, k));
      if (k < v.length()) {
         subseq(v, z + 1, k + 1, i);
      }
      else if (z > 0) {
         subseq(v, 0, 1 + i, i + 1);
      }
   }




subseq的第一个递归调用使zk分别加1。
i用作增加k的下一个数量
因此,对subseq的第二次调用将z还原为0,将k还原为1+i
在第二个调用中,i也增加了1
一直持续到k >= length of stringz = 0
字符串和最后打印的字符串。


但是我更喜欢嵌套循环解决方案。

关于java - 如何以最简单的方式在Java中找到数字的子序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59359912/

10-10 15:08