算法--排列组合

1.m个字母的全排列

java 复制代码
package cn.rainbow.algorithm;

import com.github.sd4324530.fastweixin.util.JSONUtil;
import org.apache.commons.lang.StringUtils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class FullArray {
    public static void main(String[] args){
        List<String> result =new ArrayList<>();
        Set<String> s = new HashSet<String>();
        s.add("jia");
        s.add("home");
        s.add("plus");
        s.add("super");

        String[] arr = s.toArray(new String[s.size()]);
        for(int k=1;k<s.size()+1;k++){
            int n=k;//取n个数
            List<String> list=new ArrayList<String>();
            for(int i=0;i<n;i++)
                list.add("");//存入-1/""的目的是初始化数组长度为n,并且使其值不是需要的对象(数字或字符)
            sort(list,arr,n,result);
        }

        System.out.println(JSONUtil.toJson(result));

    }

    public static void sort(List<String> list,String[] arr,int n,List<String> result){
        if(n==0){
            result.add(StringUtils.join(list,","));
            return;//重点,不能漏
        }
        for(int i=0;i<arr.length;i++){
            if(!list.contains(arr[i]))//查找list里有无此值
                list.set(list.size()-n,arr[i]);//如果没有则存入list
            else
                continue;
            sort(list,arr,n-1,result);//如果存入了一个对象,就继续递归
            list.set(list.size()-n,"");//回溯时把list重置为-1/空字符
        }
    }

}
/**
* 运行结果
*/
[
	"super",
	"jia",
	"plus",
	"home",
	"super,jia",
	"super,plus",
	"super,home",
	"jia,super",
	"jia,plus",
	"jia,home",
	"plus,super",
	"plus,jia",
	"plus,home",
	"home,super",
	"home,jia",
	"home,plus",
	"super,jia,plus",
	"super,jia,home",
	"super,plus,jia",
	"super,plus,home",
	"super,home,jia",
	"super,home,plus",
	"jia,super,plus",
	"jia,super,home",
	"jia,plus,super",
	"jia,plus,home",
	"jia,home,super",
	"jia,home,plus",
	"plus,super,jia",
	"plus,super,home",
	"plus,jia,super",
	"plus,jia,home",
	"plus,home,super",
	"plus,home,jia",
	"home,super,jia",
	"home,super,plus",
	"home,jia,super",
	"home,jia,plus",
	"home,plus,super",
	"home,plus,jia"
]
相关推荐
猎头南楼8 分钟前
具身智能模型部署方向的能力要求与技术栈梳理
人工智能·深度学习·算法
啥都想学点的研究生1 小时前
一篇文章讲清楚:线性回归问题的求解——正规方程法
算法·机器学习·线性回归
青少儿编程课堂1 小时前
树状数组精讲:逆序对计数与离散化(附双语言解法)
算法·树状数组·离散化·信息学奥赛·逆序对
血小板要健康2 小时前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
VALENIAN瓦伦尼安教学设备2 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法
小小晓.2 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
怕浪猫3 小时前
用了两年 AI 编程工具后,我重新理解了什么是「资深工程师」
算法·面试·架构
hetao17338373 小时前
2026-08-27~29 hetao1733837 的刷题记录
c++·算法
云淡风轻~窗明几净3 小时前
宇宙管理学猜想
算法·图论
春风解人意3 小时前
从零开始学习嵌入式P28----线程
c语言·学习·算法