算法--排列组合

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"
]
相关推荐
一切皆是因缘际会6 小时前
从概率拟合到内生心智:2026 下一代 AI 架构演进与落地实践
人工智能·深度学习·算法·架构
Java成神之路-6 小时前
【LeetCode 刷题笔记】34. 在排序数组中查找元素的第一个和最后一个位置 | 二分查找经典刷题题解
算法·leetcode
不忘不弃7 小时前
用BFS方法求解平分汽油问题
算法·宽度优先
AI科技星7 小时前
全域数学·72分册·射影原本 无穷维射影几何卷细化子目录【乖乖数学】
人工智能·线性代数·算法·机器学习·数学建模·数据挖掘·量子计算
风落无尘7 小时前
《智能重生:从垃圾堆到AI工程师》——第四章 变化的艺术
人工智能·线性代数·算法
JAVA面经实录9177 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
AC赳赳老秦7 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
WBluuue7 小时前
Codeforces 1093 Div2(ABCD1D2)
c++·算法
浅念-7 小时前
「一文吃透 BFS:从层序遍历到锯齿形、最大宽度、每层最大值」
数据结构·算法
汉克老师8 小时前
GESP5级C++考试语法知识(十三、贪心算法(一))
算法·贪心算法·海盗船·gesp5级·gesp五级·排队接水