算法--排列组合

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"
]
相关推荐
dialect_7 小时前
KMP算法
开发语言·c++·算法
reikocao7 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz7 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·8 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
是main不是漫9 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司10 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真12 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄12 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
Tisfy12 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH13 小时前
P5025 [SNOI2017] 炸弹
c++·算法