java 排列组合算法_关于各种排列组合java算法
import java.util.Arrays;
//利用二进制算法进行全排列
//count1:170187
//count2:291656
public class test {
public static void main(String[] args) {
long start=System.currentTimeMillis();
count2();
long end=System.currentTimeMillis();
System.out.println(end-start);
}
private static void count2(){
int[] num=new int []{1,2,3,4,5,6,7,8,9};
for(int i=1;i
String str=Integer.toString(i,9);
int sz=str.length();
for(int j=0;j<9-sz;j++){
str="0"+str;
}
char[] temp=str.toCharArray();
Arrays.sort(temp);
String gl=new String(temp);
if(!gl.equals("012345678")){
continue;
}
String result="";
for(int m=0;m
result+=num[Integer.parseInt(str.charAt(m)+"")];
}
System.out.println(result);
}
}
public static void count1(){
int[] num=new int []{1,2,3,4,5,6,7,8,9};
int[] ss=new int []{0,1,2,3,4,5,6,7,8};
int[] temp=new int[9];
while(temp[0]<9){
temp[temp.length-1]++;
for(int i=temp.length-1;i>0;i--){
if(temp[i]==9){
temp[i]=0;
temp[i-1]++;
}
}
int []tt=temp.clone();
Arrays.sort(tt);
if(!Arrays.equals(tt,ss)){
continue;
}
String result="";
for(int i=0;i
result+=num[temp[i]];
}
System.out.println(result);
}
}
}
一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用
二.用递归的思想来求排列跟组合,代码量比较大
package practice;
import java.util.ArrayList;
import java.util.List;public classTest1 {/**
* @param args*/
public static voidmain(String[] args) {//TODO Auto-generated method stub
Object[] tmp={1,2,3,4,5,6};//ArrayList rs=RandomC(tmp);
ArrayList rs=cmn(tmp,3);for(int i=0;i
{//System.out.print(i+"=");
for(int j=0;j
{
System.out.print(rs.get(i)[j]+",");
}
System.out.println();
}
}//求一个数组的任意组合
static ArrayListRandomC(Object[] source)
{
ArrayList result=new ArrayList();if(source.length==1)
{
result.add(source);
}else{
Object[] psource=new Object[source.length-1];for(int i=0;i
{
psource[i]=source[i];
}
result=RandomC(psource);int len=result.size();//fn组合的长度
result.add((new Object[]{source[source.length-1]}));for(int i=0;i
{
Object[] tmp=new Object[result.get(i).length+1];for(int j=0;j
{
tmp[j]=result.get(i)[j];
}
tmp[tmp.length-1]=source[source.length-1];
result.add(tmp);
}
}returnresult;
}static ArrayList cmn(Object[] source,intn)
{
ArrayList result=new ArrayList();if(n==1)
{for(int i=0;i
{
result.add(newObject[]{source[i]});
}
}else if(source.length==n)
{
result.add(source);
}else{
Object[] psource=new Object[source.length-1];for(int i=0;i
{
psource[i]=source[i];
}
result=cmn(psource,n);
ArrayList tmp=cmn(psource,n-1);for(int i=0;i
{
Object[] rs=newObject[n];for(int j=0;j
{
rs[j]=tmp.get(i)[j];
}
rs[n-1]=source[source.length-1];
result.add(rs);
}
}returnresult;
}
}
三.利用动态规划的思想求排列和组合
packageAcm;//强大的求组合数
public classMainApp {public static voidmain(String[] args) {int[] num=new int[]{1,2,3,4,5};
String str="";//求3个数的组合个数//count(0,str,num,3);//求1-n个数的组合个数
count1(0,str,num);
}private static void count1(int i, String str, int[] num) {if(i==num.length){
System.out.println(str);return;
}
count1(i+1,str,num);
count1(i+1,str+num[i]+",",num);
}private static void count(int i, String str, int[] num,intn) {if(n==0){
System.out.println(str);return;
}if(i==num.length){return;
}
count(i+1,str+num[i]+",",num,n-1);
count(i+1,str,num,n);
}
}
下面是求排列
packageAcm;//求排列,求各种排列或组合后排列
importjava.util.Arrays;importjava.util.Scanner;public classDemo19 {private static booleanf[];public static voidmain(String[] args) {
Scanner sc=newScanner(System.in);int sz=sc.nextInt();for(int i=0;i
f=new boolean[sum];
Arrays.fill(f,true);int[] num=new int[sum];for(int j=0;j
num[j]=j+1;
}int nn=sc.nextInt();
String str="";
count(num,str,nn);
}
}/***
*@paramnum 表示要排列的数组
*@paramstr 以排列好的字符串
*@paramnn 剩下需要排列的个数,如果需要全排列,则nn为数组长度*/
private static void count(int[] num, String str, intnn) {if(nn==0){
System.out.println(str);return;
}for(int i=0;i
}
f[i]=false;
count(num,str+num[i],nn-1);
f[i]=true;
}
}
}
java 排列组合算法_关于各种排列组合java算法相关推荐
- Python_机器学习_算法_第1章_K-近邻算法
Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...
- java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析
0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...
- weka java 分类算法_使用Weka快速实践机器学习算法
[译者注]在当下人工智能火爆发展的局面,每时每刻都有新的技术在诞生,但如果你是一个新手,Weka或许能帮助你直观.快速的感受机器学习带来的解决问题的新思路. Weka使机器学习的应用变得简单.高效并且 ...
- mysql join 算法_【MySQL】之join算法详解
在阿里巴巴的java开发手册有这么一条强制规定:超过三个表禁止join,需要join的字段,数据类型保持绝对一致,多表关联查询时,要保证被关联的字段需要有索引. 为什么尽量避免使用join?如果使用j ...
- ++代码实现 模糊综合算法_干货 | 十大经典排序算法最强总结(内含代码实现)...
一.算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元 ...
- pcy 算法_大数据分析中的PCY算法
pcy 算法 PCY algorithm was developed by three Chinese scientists Park, Chen, and Yu. This is an algori ...
- 错误录入 算法_如何使用验证错误率确定算法输出之间的关系
错误录入 算法 Monument (www.monument.ai) enables you to quickly apply algorithms to data in a no-code inte ...
- 利用python语言实现分类算法_使用python实现kNN分类算法
k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很 ...
- java面试题成都_成都汇智动力-java面试——多线程面试题
原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...
- java+cas实现类_像宝石一样的Java原子类-基于CAS实现
主要内容 1. 线程同步标准的处理方法:上锁 2. 锁的问题 3. 硬件同步原语CAS 4. 使用CAS实现计数器 5. Lock-free和 wait-free 算法 6. Atomic原子变量类 ...
最新文章
- 个人技术生涯的感悟(2)
- 从看见到听见,机器人传感能否解决智能制造检测的最后一公里难题?
- 7.13 T2 Shit 题(shit)
- 面向过程和面向对象的区别
- 9种蔬菜吃不对胜似砒霜
- NYOJ 139 我排第几个?
- Quicker--文件搜索工具介绍
- 计算机二级access选择题题库_资料最新计算机二级题库,选择题资料汇总+全真试题分享(Office)...
- 更改apk安装包对android系统等级要求
- VUE:兄弟组件间传参
- 数据库中存储过程和触发器有什么异同?
- 从“谈芯”走向“用芯” RISC-V 未来前景光明?
- linux扩大lvm_Linux下lvm在线扩容步骤
- 单调队列(数列中长度不超过k的子序列和的最值)
- Adobe 强烈建议卸载:教你从 Win10 彻底删除 Flash
- 东大22春《马克思主义基本原理X》在线平时作业1_100分满分非答案
- 保护眼睛的颜色和各种背景颜色设置方法(转)
- greenplum创建外部表笔记-readable篇
- 微信公众号怎么上传资料?
- Teambition使用教程
热门文章
- 2021第十二届蓝桥杯国赛B组题解(C/C++)
- EAccessViolation型错误
- 2021寒假MISC打卡DAY1
- DH加密通信python实现
- PyTorch | torch.manual_seed(1)是什么意思?torch随机数manual_seed(1)有什么用?如何理解torch.manual_seed(1)
- 实习期间的一些思考整理(1)2018.4.8~4.9
- 金融企业如何构建有效的数据分析体系?1000+案例经验汇总
- 金凯瑞在马赫西管理大学毕业典礼的演讲
- Mac 下撰写文档时输入 command、option、control 等键盘符号的方法
- AutoCAD2014下载和安装教程(官方中文完整版)