文档章节

Java 排列 组合 组合后排列

爱吃窝窝头
 爱吃窝窝头
发布于 2015/10/17 20:59
字数 784
阅读 80
收藏 1

Java 实现排列、组合、组合后排列!从m个里面选n个问题!今晚笔试同程旅游,最后一个编程题:关于排列组合的,原题的意思是:由 1,2,3,4这四个数字中选出3个数字,然后这些数最后能组合成多少个数?

问题一

由 1,2,3,4这四个数字中选出3个数字,然后这些数最后能组合成多少个数?

先上代码:

public class Main
{

	public static final int n = 3;

	public static int m = 4;

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{

		int[] array = new int[n];
		f(array, 0);

	}

	public static void f(int[] array, int now)
	{

		if (now >= n)
		{

			for (int i : array)
			{
				System.out.print(i + " ");
			}
			System.out.println();
			return;
		}
		else
		{
			for (int start = 1; start <= m; start++)
			{

				array[now] = start;
				if (j(array, now))// 判断是否出现重复
				{
					f(array, now + 1);
				}

			}
		}

	}

	public static boolean j(int[] array, int now)
	{

		for (int i = 0; i <= now; i++)
		{

			for (int j = i + 1; j <= now; j++)
			{
				if (array[i] == array[j])
				{
					return false;
				}
			}
		}
		return true;

	}
}

结果是

一共24个程序运行结果如下:

1 2 3 

1 2 4 

1 3 2 

1 3 4 

1 4 2 

1 4 3 

2 1 3 

2 1 4 

2 3 1 

2 3 4 

2 4 1 

2 4 3 

3 1 2 

3 1 4 

3 2 1 

3 2 4 

3 4 1 

3 4 2 

4 1 2 

4 1 3 

4 2 1 

4 2 3 

4 3 1 

4 3 2 

问题二(排列问题)

那么问题来了,我只想要对4个数全排列,我该怎么做呢?只要对n的值做修改就OK了,是不是很简单?

public class Main
{

	public static final int n = 4;//改这个地方

	public static int m = 4;

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{

		int[] array = new int[n];
		f(array, 0);

	}

	public static void f(int[] array, int now)
	{

		if (now >= n)
		{

			for (int i : array)
			{
				System.out.print(i + " ");
			}
			System.out.println();
			return;
		}
		else
		{
			for (int start = 1; start <= m; start++)
			{

				array[now] = start;
				if (j(array, now))// 判断是否出现重复
				{
					f(array, now + 1);
				}

			}
		}

	}

	public static boolean j(int[] array, int now)
	{

		for (int i = 0; i <= now; i++)
		{

			for (int j = i + 1; j <= now; j++)
			{
				if (array[i] == array[j])
				{
					return false;
				}
			}
		}
		return true;

	}
}

问题三(组合问题)

那么问题来了?如果我们只是想单纯的从4个数字中选3个数字,怎么来实现呢?废话不多说:见下面代码,下面的代码是基于上面加工而成,所以简洁明了!

public class Main
{

	public static final int n = 3;

	public static int m = 4;

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{

		int[] array = new int[n];
		f(array, 0, 1);

	}

	public static void f(int[] array, int now, int start)
	{

		if (now >= n)
		{

			for (int i : array)
			{
				System.out.print(i + " ");
			}
			System.out.println();
			return;
		}
		else
		{
			for (; start <= m; start++)
			{

				array[now] = start;
				if (j(array, now))
				{
					f(array, now + 1, start + 1);
				}

			}
		}

	}

	public static boolean j(int[] array, int now)
	{

		for (int i = 0; i <= now; i++)
		{

			for (int j = i + 1; j <= now; j++)
			{
				if (array[i] == array[j])
				{
					return false;
				}
			}
		}
		return true;

	}
}

程序输出结果如下:

1 2 3 

1 2 4 

1 3 4 

2 3 4 

总结:排列组合问题往往是穷举法的一种体现形式,所以,还是要掌握好的!

© 著作权归作者所有

共有 人打赏支持
爱吃窝窝头
粉丝 1
博文 37
码字总数 12870
作品 0
南京
第五章 spring-connet之bean生命周期与bean监控

前言 javaBean javaBean是java公共组件的标准。起源于Java GUI的可视化编程实现的,所有的组件都需要支持拖拉,那么所有的组件的行为都是一致的。当拖拉组件的时候,就会创建一个改组件的对象...

鸟菜啊
04/27
0
0
java 同步块(Java Synchronized Blocks)

Java 同步块包括方法同步和代码块同步。java 同步可以避免资源竞争,避免死锁。 主题包括的主要内容: 关键字 Synchronized 实例方法 Synchronized static methods Synchronized blocks in i...

丁佳辉
2015/08/18
0
0
想成为大数据人才?你得拥有这些能力!

01 起 大数据行业持续升温,越来越多的人才涌进这个行业。 想知道这个行业需要什么样的人才么? 大数据的问题就交给大数据去完成吧~~ 我们按特定的职位名称,爬取了拉勾网上成都地区所有大数...

邓莎
06/28
0
0
Java设计模式学习记录-装饰模式

前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度。JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一...

纪莫
08/12
0
0
play2.0文档-面向java开发者(6)

Action composition Action组合 This chapter introduces several ways to define generic action functionality. 这章节介绍几个定义通用action功能的方式。 Reminder about actions actio......

老盖
2012/04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JSCH会大量使用服务器内存吗?会

java实现一个需求用到了jsch,发现服务器内存会被占满。 写了个50进程的jsch-sftp测试连接 put一个文件 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(50);for (int j =...

just-coding
28分钟前
1
0
聊聊redis的数据结构的应用

序 本文主要研究一下redis的数据结构的应用 string 最常用的就是incr操作,比如可以用来维护用户在某个抽奖活动的剩余抽奖次数 setnx方法可以用来实现分布式锁 hashmap 可以用来存储session...

go4it
29分钟前
4
0
《将博客搬至CSDN》

搬到csdn

我风依旧
32分钟前
4
0
源码编译安装最新版 Subversion 1.10.x

一、使用包管理器自动安装 官方网站提供了常见 Linux 发行版的安装命令,此处仅以 CentOS、Debian 及 Ubuntu 为例进行说明,其它系统详见官网:https://subversion.apache.org/packages.html...

whoru
35分钟前
0
0
liquibase

今天在看springboot源码时发现一个好东西。 LiquibaseServiceLocatorApplicationListener Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包...

jack_peng
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部