使用递归打印子字符串(void方法)

时间:2019-06-20 08:30:22

标签: java recursion

我想按以下顺序打印子字符串:  “”,“ d”,“ c”,“ cd”,“ b”,“ bd”,“ bc”,“ bcd”,“ a”,“ ad”,“ ac”,“ acd”,“ ab” ,“ abd”,“ abc”,“ abcd”

我编写了一个代码,该代码将获取字符串的第一个字符,然后从enxt字符获取随后的子字符串,然后对其进行调用。 该过程将一直进行到字符串为空为止。然后,我开始将字符串和字符连接起来以形成系列。 我编写了以下代码,但对于最后几种编排没有给出正确的结果。 我在这里做错了什么?

import java.util.Scanner;

public class PrintSubstringsWithVoid {
    public static void main(String[] args) {
        Scanner scn =new Scanner(System.in);
        String str=scn.nextLine();
        printSub(str,'\0');
    }
    public static void printSub(String str,char ch1){

        if (str.length()==0){
            StringBuilder sb=new StringBuilder();
            sb.append(ch1);
            System.out.println(sb.toString()+"");
            return;
        }
        char ch=str.charAt(0);
        String st=str.substring(1);
        printSub(st,ch1);
        StringBuilder sb1=new StringBuilder();
        if (st.length()<=1){
            sb1.append(ch);
            StringBuilder sb2=new StringBuilder();
            sb2.append(ch1);
            String stt=sb2.toString()+sb1.toString();
            System.out.println(stt);

            String st1=sb2.toString()+sb1.toString()+st;
            if (st.length()!=0) {
                System.out.println(st1);
            }
        }else{

            printSub(st,ch);
        }

    }
}

这些是我的结果: d C 光盘 b d 公元前 光盘 一种 广告 交流电 光盘 b d 公元前 bcd

最后4个编队'a'都在这里丢失

1 个答案:

答案 0 :(得分:1)

该解决方案很简单,就像您有一个字符串“ abcd”一样。因此,如果您知道“ bcd”的答案,那么通过将“ a”与所有“ bcd”的结果相加,“ abcd”的答案将是“ bcd”的答案加上字符串。

例如, “ bcd”的结果是:d, c, cd, b, bd, bc, bcd,
因此,“ abcd”的结果将是:d, c, cd, b, bd, bc, bcd, a, a+(d, c, cd, b, bd, bc, bcd)

所以解决方案是:

import java.util.ArrayList;
import java.util.Scanner;

public class PrintSubstrings {

    public static void main(String[] args) {
        Scanner scn =new Scanner(System.in);
        String str=scn.nextLine();
        ArrayList<String>ans=printSub(str);
        for(int i=0;i<ans.size();i++)
        {
            System.out.print(ans.get(i)+" ");
        }
    }
    public static ArrayList<String> printSub(String str) {

        if(str.length()==0)return new ArrayList<String>();

        ArrayList<String> fx=printSub(str.substring(1));

        int size=fx.size();
        fx.add(Character.toString(str.charAt(0)));
        for(int i=0;i<size;i++)
        {
            fx.add(str.charAt(0)+fx.get(i));
        }
        return fx;
    }
}

使用void函数:

import java.util.ArrayList;
import java.util.Scanner;

public class aa {

    public static void main(String[] args) {
        Scanner scn =new Scanner(System.in);
        String str=scn.nextLine();
       printSub(str,"");

    }
    public static void  printSub(String str,String pre) {

        if(str.length()==0){
           System.out.println(pre);
          return;
        }

         printSub(str.substring(1),pre);

         printSub(str.substring(1),pre+Character.toString(str.charAt(0)));

    }
}