递归1

136 阅读1分钟

什么是子序列?

例如字符串str = 'abc',那么它就可以选择一个位置要还是不要。
要a:
	要b:
		要c: abc
		不要cab
	不要b:
		要c:ac
		不要ca
不要a:
	要b:
		要c:bc
		不要cb
	不要b:
		要c:c
		不要c:''
综上:str的子序列有:【abc,ab,ac,a,bc,b,c,''】

代码:

public class Class1 {
    public static void main(String[] args) {
        String s = "abc";
        char[] chars = s.toCharArray();
        List<String> sequences = new ArrayList<String>();
        getSequences(chars,0,sequences,"");
        for (String sequence : sequences) {
            System.out.println("sequence = " + sequence);
        }
    }


    /**
     * 获取一个字符串的所有子序列
     * @param chars 字符串变成一个个的字符
     * @param position 当前在哪个位置
     * @param sequences 存放所有的子序列
     * @param path 一个完整的子序列
     */
    private static void getSequences(char[] chars,int position,List<String> sequences,String path){
        if(position == chars.length){
            sequences.add(path);
            return;
        }
        //当前这个位置要还是不要
        //1.要
        String varString = path + chars[position];
        getSequences(chars,position+1,sequences,varString);

        //2.不要
        getSequences(chars,position+1,sequences,path);

    }
}