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

很久没搞过这种,然后问到这个题,我知道该用递归去实现。
但是现场怎么都写不出来,回来之后认真思考了一下,在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);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符串匹配KMP算法详解 1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有...
    张晨辉Allen阅读 7,079评论 0 3
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,455评论 0 4
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,945评论 0 5
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,778评论 0 1
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,097评论 0 3