美文网首页
递归实现输出一个若干字符串的全部顺序组合

递归实现输出一个若干字符串的全部顺序组合

作者: 凌冰_lonny | 来源:发表于2018-04-22 16:17 被阅读24次

    很久没搞过这种,然后问到这个题,我知道该用递归去实现。
    但是现场怎么都写不出来,回来之后认真思考了一下,在eclipse的调试之下终于成功了,
    如果有什么问题欢迎交流指正。
    题目是这样的,大概类似skipgram的计算,所以我就用这个名字替代了
    给定一个字符串,or数组或者什么都好了。
    假设字符都是不重复的,按顺序输出全部可能的组合,
    例如输入数据是abcd,就是要求空串,a,ab,ac,ad,abc,....这种。

    思路:
    假设一个长度为n的数组,那么如果要输出一个长度为m的子数组。
    从头开始遍历,由于结果是有序的,
    那么对于当前位,分为使用和不使用两种。
    1.使用当前位,那么递归的新数组从下一位开始,要输出的子数组的长度-1
    2.不适用当前位,那么递归的新数组从下一位开始,要输出的子数组长度不变
    3.当要输出的子数组长度为0时,输出累积的新数组,结束
    4.当新数组为空时,直接结束
    想清楚了问题,才容易解决

    public class skipGram {
    //用一个list去标识一个字符串。
        static List<String> strlist = new ArrayList<String>();
    //初始化测试集
        public void initial(){
            strlist.add("a");
            strlist.add("b");
            strlist.add("c");
            strlist.add("d");
            strlist.add("e");
            strlist.add("f");
            System.out.println(strlist.subList(0, 6));
        }
        public void printSkipGram(List<String> list){
                    List<String> strlist = new ArrayList<String>();
                  //按照输出子串的长度去区分
                    for(int j = 0; j < list.size()+1; j++)
                        recurtion(list, j, strlist);
        }
    //递归调用
        public void recurtion(List<String> list,  int l, List<String> strlist){
            if(l == 0){
                for(int i = 0; i < strlist.size(); i++){
                    System.out.print(strlist.get(i));
                }
                System.out.println();
                return;
            }
            if(list.isEmpty())
                return;
            strlist.add(list.get(0));
                  //主要是这个情况一开始没想清楚
            print(list.subList(1, list.size()), l-1, strlist);
            strlist.remove(strlist.size()-1);
            print(list.subList(1, list.size()), l, strlist);
        }
        public static void main(String[] args){
            skipGram ob = new skipGram();
            ob.initial();
            ob.printSkipGram(strlist);
        }
    }
    

    相关文章

      网友评论

          本文标题:递归实现输出一个若干字符串的全部顺序组合

          本文链接:https://www.haomeiwen.com/subject/zxdclftx.html