算法--排列组合

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"
]
相关推荐
Voyager_427 分钟前
图像处理踩坑:浮点数误差导致的缩放尺寸异常与解决办法
数据结构·图像处理·人工智能·python·算法
文艺倾年32 分钟前
【八股消消乐】手撕分布式协议和算法(基础篇)
分布式·算法
万岳科技系统开发1 小时前
从源码优化外卖配送系统:算法调度、智能推荐与数据分析应用
算法·数据挖掘·数据分析
信奥卷王4 小时前
[GESP202503 五级] 原根判断
java·数据结构·算法
兮山与4 小时前
算法4.0
算法
nju_spy4 小时前
力扣每日一题(二)任务安排问题 + 区间变换问题 + 排列组合数学推式子
算法·leetcode·二分查找·贪心·排列组合·容斥原理·最大堆
初听于你4 小时前
高频面试题解析:算法到数据库全攻略
数据库·算法
翟天保Steven4 小时前
ITK-基于Mattes互信息的二维多模态配准算法
算法
代码对我眨眼睛4 小时前
226. 翻转二叉树 LeetCode 热题 HOT 100
算法·leetcode·职场和发展
黑色的山岗在沉睡5 小时前
LeetCode 494. 目标和
算法·leetcode·职场和发展