Java 将数字串分成1位数字和2位数字组
我试图将给定的数字串分解为较小的1位数字和2位数字。 大概是这样的:Java 将数字串分成1位数字和2位数字组,java,string,backtracking,Java,String,Backtracking,我试图将给定的数字串分解为较小的1位数字和2位数字。 大概是这样的: 输入:1234 输出:(1,2,34)(1,23,4)(1,2,3,4)(12,34)(12,3,4) 我一直试图用回溯法来解决这个问题,但没有得到完美的结果。我的尝试如下: import java.util.Arrays; import java.util.ArrayList; public class MyClass { private static void func(ArrayList<String
输入:1234
输出:(1,2,34)(1,23,4)(1,2,3,4)(12,34)(12,3,4)
我一直试图用回溯法来解决这个问题,但没有得到完美的结果。我的尝试如下:
import java.util.Arrays;
import java.util.ArrayList;
public class MyClass {
private static void func(ArrayList<String> res, String digits, String s){
if(digits.length() <= 0){
res.add(s.substring(0, s.length()-1));
return;
}
String temp = digits;
String prev_s = s;
s = s + digits.charAt(0) + ","; // chosen one character
func(res, digits.substring(1), s);
prev_s = s;
if(digits.length() >= 2){
s = s + digits.substring(0,2) + ","; // chosen two characters
func(res, digits.substring(2), s);
}
s = prev_s;
digits = temp; // unchoosing
}
public static void main(String args[]) {
String digits = "1234";
ArrayList<String> res = new ArrayList<>();
String s = "";
func(res, digits, s);
for(int i =0; i < res.size(); i++){
System.out.println(res.get(i));
}
}
}
1,2,3,4
1,2,3,34
1,2,23,4
1,12,3,4
1,12,3,34
我做错了什么?我想我在创建子字符串的时候把事情搞砸了
另外,这个问题可以不使用回溯来解决吗?
谢谢 您的问题是恢复
s
的分配方式错误:
prev_s=s代码>→ <代码>s=上一个代码>
仅此一项就能解决你的问题
除此之外:
- 您不需要最后两条语句。他们什么也不做。
记住,Java是按值传递的,所以在返回之前不需要恢复参数
- 您不应该更改参数的值。相反,只需在递归方法调用中进行连接
- 删除
temp
和prev_s
,因为它们不再需要
- 代码可以通过在逗号前加前缀而不是后缀来稍微简化
公共类MyClass{
私有静态void func(ArrayList res、字符串数字、字符串s){
if(digits.isEmpty()){
res.add(s.子字符串(1));
返回;
}
func(res,digits.substring(1),s+','+digits.charAt(0));
if(digits.length()>=2){
func(res,digits.substring(2),s+','+digits.substring(0,2));
}
}
公共静态void main(字符串参数[]){
ArrayList res=新的ArrayList();
func(res,“1234”和“);
for(字符串r:res){
系统输出println(r);
}
}
}
输出
1,2,3,4
1,2,34
1,23,4
12,3,4
12,34
你好,安德烈亚斯!谢谢你的回答和提示!这些对于像我们这样的新开发人员来说非常有用!