gpt4 book ai didi

java - 如何用最简单的方法在java中找到数字的子序列

转载 作者:行者123 更新时间:2023-11-30 01:42:49 24 4
gpt4 key购买 nike

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

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);
}

}

输出:

2424

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

最佳答案

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

      [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);
}
}

  1. 第一次递归调用 subseq 时,zk 各递增 1。
  2. i 用作下一个增量 k
  3. 因此,对 subseq 的第二次调用将 z 调用回 0,将 k 调用回 1+i在第二次调用中,i 也增加了 1
  4. 这会一直持续到 k >= 字符串长度z = 0(即整个字符串)字符串和最后打印的字符串。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com