算法--排列组合

这篇具有很好参考价值的文章主要介绍了算法--排列组合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.m个字母的全排列

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"
]

文章来源地址https://www.toymoban.com/news/detail-593755.html

到了这里,关于算法--排列组合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 排列(Amn)与组合(Cmn)算法详解

    不区分个体差异和顺序时用Cmn(m小n大),需要区分个体和顺序时候用Amn。 例1:从10个相同的球里取出5个球,不需要区分先后顺序,也不区分其他个体特征,一把抓过去够5个就行,这就是C510(m=5,n=10)。 例2:有10把凳子,需要安排10个人去坐,问有多少种可能性。这里,就需要体

    2024年02月04日
    浏览(40)
  • 【C++】 排列与组合算法详解(进阶篇)

    写在前面 我上次发了一篇题解:C++排列与组合算法详解 最开始,我是抱着水题解的想法写的,但却成为了阅读量 最高 的文章,没有之一。 所以今天咱们来重制一篇文章,介绍几个进阶优化版的算法。 算法1:朴素算法 思路 具体见 C++排列与组合算法详解 缺点 不能将结果取

    2024年02月13日
    浏览(40)
  • 【算法】递归、回溯、剪枝、dfs 算法题练习(组合、排列、总和问题;C++)

    后面的练习是接着下面链接中的文章所继续的,在对后面的题练习之前,可以先将下面的的文章进行了解👇: 【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++) 思路 题意分析 :要求根据给出的数字,算出合法的括号组成个数。根据题目,我们可以总

    2024年02月22日
    浏览(50)
  • 【C/C++练习】经典的排列组合问题(回溯算法)——电话号码的字母组合

    📖题目描述 题目出处 :电话号码的字母组合 示例: 📖题解  这是一道典型的排列组合问题,根据输入,我们需要找到所有的组合。下面以输入字符串 digits = \\\"23\\\" 为例来讲解这道题目。 图解: 分析:  首先要知道输入的字符串 \\\"23\\\" 中的数字字符分别对应哪些字符串,其中

    2024年02月16日
    浏览(40)
  • (3)回溯算法团灭子集、组合、排列问题 -- 元素无重可复选

    回溯算法团灭子集、组合、排列问题 根据元素是否重复和是否可复选,分为以下三种变体: 1、元素无重不可复选 2、元素有重不可复选 3、元素无重可复选 该篇给出第三种情况的代码,另外两种的实现见上方变体链接。

    2024年02月09日
    浏览(31)
  • 【数据结构】回溯算法公式化解题 leetcode经典题目带刷:全排列、组合、子集

    一、什么是回溯算法 回溯算法(Backtracking Algorithm)是一种解决 组合问题 、 排列问题 、 选择问题 等一类问题的常用算法。它通过尝试所有可能的选择来找到问题的解,当发现当前选择不符合要求时,就回溯到之前的状态,然后尝试其他的选择。 1、基本思想: 从问题的起

    2024年02月11日
    浏览(45)
  • leetcode--回溯算法.全排列(java)

    leetcode 46 原题链接-- 全排列 题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例1: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例2: 输入:nums = [0,1] 输出:[[0,1],[1,0]] 示例3: 输入:nums = [1

    2024年02月08日
    浏览(35)
  • leetcode46. 全排列(回溯算法-java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/permutations 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2: 输入:nums = [0,1] 输出:[[0,1],[1,0]]

    2024年02月11日
    浏览(41)
  • python排列组合

    itertools.permutations(iterable,r=None) 功能:连续返回由iterable序列中的元素生成的长度为r的排列 如果r未指定或为None,r默认设置为iterable的长度,即生成包含所有元素的全排列 简单应用示例如下: 代码清单1-1: 输出: ab ac ba bc ca cb 问:permutations()按什么顺序输出序列? 答:按元

    2024年02月06日
    浏览(41)
  • 数学-排列组合的理解

    排列是有顺序的排队,从 m 中选择 n 个进行排队,第 1 个有 m-0 种选择,第 2 个有 m-1 种选择,自然的,第 n 个有 m-(n-1) 种选择。因为有顺序,可以看出前面的选择,会后面影响后面的选择,所以将选择每个的可能数相乘。 A m n = ( m − 0 ) ∗ ( m − 1 ) ∗ . . . ∗ ( m − ( n − 1

    2023年04月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包