求一个给定若干字符求这些字符排列组合的算法

你好sun悟空 2017-08-02 12:06:54
比如给定a,b,c,d……输出它们所有的排列组合。在能实现功能的情况下,算法效率越高越好!
...全文
265 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
解开者 2017-08-03
  • 打赏
  • 举报
回复
用了Stream,效率不高但代码够短的实现方式
    public static void main(String[] args) {
        String[] array = {"a", "b", "c", "d"};
        System.out.println(Stream.of(IntStream.range(0, array.length).mapToObj(i -> IntStream.range(0, array.length).mapToObj(String::valueOf).toArray(String[]::new))
                .reduce((a, b) -> Stream.of(a).flatMap(s1 -> Stream.of(b).map(s2 -> s1 + s2)).toArray(String[]::new)).get())
                .filter(s -> s.chars().distinct().count() == s.length()).map(s -> s.chars().mapToObj(i -> array[i - 48]).collect(Collectors.joining())).collect(Collectors.toList())
        );
    }
解开者 2017-08-03
  • 打赏
  • 举报
回复
全排列的时间复杂度是恒定的,为O(n!) 如果实践中真用到全排列,代码简洁度通常更重要

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧