如何实现从M个数字选取N个数字排列算法

本文介绍了如何从给定的十个数字中选取八个进行排列的算法,详细阐述了算法思路,包括固定部分数字并寻找可替换可能,以及替换原则等。最后通过代码展示了算法实现,并输出了15种不同的排列组合。
摘要由CSDN通过智能技术生成

在第一份工作结束的时候,还是个java小白,找工作的时候去面试,碰到一个算法题:

从十个数字中选取八个数字排列,重复算一个,一共有多少种可能?

当时想了半天也没想出来,虽然是数学上的排列组合算法,但是还是想自己思考下解决方案。

今天发一下自己的解决思路,思路很简单,适合初级程序员:

1、假定max个数,抽取min个数字

2、初始化一个组合为数字 0-min

3、固定min-1个数字,找出其中一个数字的可替换可能,从高min到低0依次替换第cou位数字

4、替换前设定第cou位之后到min位的数字全为-1

5、替换第cou位,若发现所有组合数字全部替换完毕,则是一种组合,否则,替换第cou+1位(迭代)

有几个替换原则了解一下:

1、替换cou位数字的值一定要大于cou位数字,例如:0-2-?,?一定要大于2,可以保证所有的组合都是从小到大排列,既不会重复

2、替换cou位数字完毕之后,一定要依次替换cou位之后为-1的,直到替换到最后一位,例如:1-?-? 第一次替换位1-2-?,       要接着替换第三位为1-2-3,1-2-4

接下来,用代码来了解一下:

package com.lytx.ims.aa;

import java.util.ArrayList;
import java.util.List;

/**
 * max十个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值