猿问

将数字字符串分成1位和2位数字的组

我正在尝试将给定的数字字符串分成较小的1位数字和2位数字。像这样的东西:


Input : 1234 

Output : (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

我在做什么错?我想我在创建子字符串时搞砸了。


另外,不使用回溯功能就可以解决此问题吗?谢谢!


炎炎设计
浏览 117回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答