关于java各方法java 多数组 排列组合合问题

282930311234567891011121314151617181920212223242526272812345678910
阅读排行榜
评论排行榜您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
java实现排列组合 java 全排列 全组合 排列组合课程.doc 19页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
JAVA面试题(算法篇)
?( 22:25:09)转载▼
最大公约数?
最小公倍数?
杂谈 ?JAVA面试题
public燾lass燙onvention爗牋-18
牋牋int燿ivisor(int爉,int爊){牋? 22:25
牋牋牋牋if(m%n==0){牋爉,int
牋牋牋牋牋爎eturn爊;牋{牋爉,int爊
牋牋牋爙else{牋n爊;牋{
牋牋牋牋牋爎eturn燿ivisor(n,m%n);牋22:25:09
牋牋牋爙牋爎etur
牋牋}牋牋爎e
牋牋牋牋牋爎
牋牋int爂bs(int燼,int燽){牋m%n);牋
牋牋牋牋int爂bs??;牋int燽){牋m
牋牋牋牋gbs?燼*b/divisor(a,b);牋牋22:25:
牋牋牋牋return牋爄sor(a
牋牋}牋ret
算法程序题: ????该公司笔试题就1个,要求在10分钟内作完? ????题目如下:用1?2?2?3?4?5这六个数字,用java写一个main函数,打印出所有不同的排列,如:345等,要求:&4&不能在第三位,&3&与&5&不能相连? 解法一: private static String[] forbidenNumber = new String[] { &0&, &6&, &7&, &8&, ???&9& }; ?private static String[] mustExistNumber = new String[] { &1&, &2&, &2&, ???&3&, &4&, &5& };
?private static boolean isValidNumber(String str) { ??// 检查是否有非法数字,有返回false,否则继续 ??for (String number : forbidenNumber) { ???if (str.indexOf(number) &= 0) { ???? ???} ??} ??// 检查是否存在要的数字,如果不存在返回false,否则继续 ??for (String number : mustExistNumber) { ???int temp = str.indexOf(number); ???if (temp & 0) { ???? ???} else if ((str.indexOf(number, temp + 1) & temp) ?????&& str.charAt(temp) != '2') { ???? ???} ??} ??// 检查4在不在第三位,是返回false ??if (str.charAt(2) == '4') { ??? ??} ??// 检查是否存在35在一起,有返回false ??if (str.indexOf(&35&) &= 0 || str.indexOf(&53&) &= 0) { ??? ??} ?? ?}
?public static void main(String[] args) { ??// TODO code application logic here ??for (int i = 122345; i & 543221; i++) { ???if (isValidNumber(String.valueOf(i))) { ????System.out.println(i); ???} ??} ?}
private static String[] mustExistNumber = new String[] { &1&, &2&, &2&, ???&3&, &4&, &5& };
?private static boolean isValidNumber(String str) {
??// 检查是否包含12345这五个数,不包含返回false ??for (String
正在加载中,请稍后...匿名用户不能发表回复!|博客分类:
import java.util.ArrayL
* 全排列算法
public class Arrange {
private int total = 0;
private ArrayList&string&&/string& arrangeList = new ArrayList&string&&/string&();
public Arrange() {
private void swap(String list[], int k, int i) {
String c3 = list[k];
list[k] = list[i];
list[i] = c3;
public void perm(String list[], int k, int m) {
if (k & m) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i &= i++) {
sb.append(list[i]).append(",");
if (sb.length()&0) {
sb.setLength(sb.length()-1);
arrangeList.add(sb.toString());
for (int i = i &= i++) {
swap(list, k, i);
perm(list, k + 1, m);
swap(list, k, i);
public int getTotal() {
public ArrayList&string&&/string& getArrangeList() {
return arrangeL
public static void main(String args[]) {
String list[] = { "1", "2", "3", "4", "5" };
Arrange ts = new Arrange();
ts.perm(list, 0, list.length-1);
for (int i = 0; i & ts.getArrangeList().size(); i++) {
System.out.println(ts.getArrangeList().get(i));
System.out.println("total:" + ts.total);
import java.util.ArrayL
import java.util.BitS
/** 组合算法 */
public class Combination {
private ArrayList&string&&/string& combList= new ArrayList&string&&/string&();
public void mn(String[] array, int n) {
int m = array.
if (m & n)
throw new IllegalArgumentException("Error
BitSet bs = new BitSet(m);
for (int i = 0; i & i++) {
bs.set(i, true);
printAll(array, bs);
} while (moveNext(bs, m));
* 1、start 第一个true片段的起始位,end截止位
* 2、把第一个true片段都置false
* 3、数组从0下标起始到以第一个true片段元素数量减一为下标的位置都置true
* 4、把第一个true片段end截止位置true
* @param bs 数组是否显示的标志位
* @param m 数组长度
* @return boolean 是否还有其他组合
private boolean moveNext(BitSet bs, int m) {
int start = -1;
while (start & m)
if (bs.get(++start))
if (start &= m)
while (end & m)
if (!bs.get(++end))
if (end &= m)
for (int i = i & i++)
bs.set(i, false);
for (int i = 0; i & end - start - 1; i++)
bs.set(i);
bs.set(end);
* 输出生成的组合结果
* @param array 数组
* @param bs 数组元素是否显示的标志位集合
private void printAll(String[] array, BitSet bs) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i & array. i++)
if (bs.get(i)) {
sb.append(array[i]).append(',');
sb.setLength(sb.length() - 1);
combList.add(sb.toString());
public ArrayList&string&&/string& getCombList() {
return combL
public static void main(String[] args) throws Exception {
Combination comb = new Combination();
comb.mn(new String[]{"1","2","3","4","5","6"}, 3);
for (int i = 0; i & comb.getCombList().size(); i++) {
System.out.println(comb.getCombList().get(i));
String[] list = comb.getCombList().get(i).split(",");
Arrange ts = new Arrange();
ts.perm(list, 0, list.length-1);
for (int j = 0; j & ts.getArrangeList().size(); j++) {
System.out.println("/u0009"+ts.getArrangeList().get(j));
import java.util.ArrayL
/** 工具类 */
public class ArrangeCombine {
public static ArrayList&string&&/string& getArrangeOrCombine(String[] args,int n, boolean isArrange) throws Exception{
if (args.length&=0) {
throw new Exception("array.length&=0");
if (n&args.length) {
throw new Exception(" n&array.length");
Combination comb = new Combination();
comb.mn(args, n);
if (!isArrange) {
return comb.getCombList();
ArrayList&string&&/string& arrangeList = new ArrayList&string&&/string&();
for (int i = 0; i & comb.getCombList().size(); i++) {
String[] list = comb.getCombList().get(i).split(",");
Arrange ts = new Arrange();
ts.perm(list, 0, list.length-1);
for (int j = 0; j & ts.getArrangeList().size(); j++) {
arrangeList.add(ts.getArrangeList().get(j));
return arrangeL
public static void main(String[] args) {
ArrayList&string&&/string& arrangeOrCombine = ArrangeCombine.getArrangeOrCombine(new String[]{"1","2","3","4","5","6"}, 3, false);
ArrayList&string&&/string& arrangeOrCombine2 = ArrangeCombine.getArrangeOrCombine(new String[]{"1","2","3","4","5","6"}, 3, true);
for (int i = 0; i & arrangeOrCombine.size(); i++) {
System.out.println(arrangeOrCombine.get(i));
System.out.println("Total:"+arrangeOrCombine.size());
System.out.println("=============================");
for (int i = 0; i & arrangeOrCombine2.size(); i++) {
System.out.println(arrangeOrCombine2.get(i));
System.out.println("Total:"+arrangeOrCombine2.size());
} catch (Exception e) {
e.printStackTrace();
浏览: 182121 次
来自: 北京
为啥我在eclipse tomcat6.0启动时总报错
May ...
楼主我用你的方法在window机器 上 压缩后 ,解压文件时报 ...
我觉得2楼提出的,只不过是看起来更漂亮而已,原写法也不会出现B ...
谢谢 lemonweirui 的更正,帮我发现了一个bug,谢 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'import java.util.A
//利用二进制算法进行全排列
//count1:170187
//count2:291656
public class test {
public static void main(String[] args) {
long start=System.currentTimeMillis();
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&Math.pow(9, 9);i++){
String str=Integer.toString(i,9);
int sz=str.length();
for(int j=0;j&9-j++){
char[] temp=str.toCharArray();
Arrays.sort(temp);
String gl=new String(temp);
if(!gl.equals("")){
String result="";
for(int m=0;m&str.length();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)){
String result="";
for(int i=0;i&num.i++){
result+=num[temp[i]];
System.out.println(result);
一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用
二.用递归的思想来求排列跟组合,代码量比较大
import java.util.ArrayL
import java.util.L
public class Test1 {
* @param args
public static void main(String[] args) {
// TODO Auto-generated method stub
Object[] tmp={1,2,3,4,5,6};
ArrayList&Object[]& rs=RandomC(tmp);
ArrayList&Object[]& rs=cmn(tmp,3);
for(int i=0;i&rs.size();i++)
System.out.print(i+"=");
for(int j=0;j&rs.get(i).j++)
System.out.print(rs.get(i)[j]+",");
System.out.println();
// 求一个数组的任意组合
static ArrayList&Object[]& RandomC(Object[] source)
ArrayList&Object[]& result=new ArrayList&Object[]&();
if(source.length==1)
result.add(source);
Object[] psource=new Object[source.length-1];
for(int i=0;i&psource.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&i++)
Object[] tmp=new Object[result.get(i).length+1];
for(int j=0;j&tmp.length-1;j++)
tmp[j]=result.get(i)[j];
tmp[tmp.length-1]=source[source.length-1];
result.add(tmp);
static ArrayList&Object[]& cmn(Object[] source,int n)
ArrayList&Object[]& result=new ArrayList&Object[]&();
for(int i=0;i&source.i++)
result.add(new Object[]{source[i]});
else if(source.length==n)
result.add(source);
Object[] psource=new Object[source.length-1];
for(int i=0;i&psource.i++)
psource[i]=source[i];
result=cmn(psource,n);
ArrayList&Object[]& tmp=cmn(psource,n-1);
for(int i=0;i&tmp.size();i++)
Object[] rs=new Object[n];
for(int j=0;j&n-1;j++)
rs[j]=tmp.get(i)[j];
rs[n-1]=source[source.length-1];
result.add(rs);
三.利用动态规划的思想求排列和组合
//强大的求组合数
public class MainApp {
public static void main(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);
count1(i+1,str,num);
count1(i+1,str+num[i]+",",num);
private static void count(int i, String str, int[] num,int n) {
System.out.println(str);
if(i==num.length){
count(i+1,str+num[i]+",",num,n-1);
count(i+1,str,num,n);
下面是求排列
//求排列,求各种排列或组合后排列
import java.util.A
import java.util.S
public class Demo19 {
private static boolean f[];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int sz=sc.nextInt();
for(int i=0;i&i++){
int sum=sc.nextInt();
f=new boolean[sum];
Arrays.fill(f, true);
int[] num=new int[sum];
for(int j=0;j&j++){
num[j]=j+1;
int nn=sc.nextInt();
String str="";
count(num,str,nn);
* @param num 表示要排列的数组
* @param str 以排列好的字符串
* @param nn
剩下需要排列的个数,如果需要全排列,则nn为数组长度
private static void count(int[] num, String str, int nn) {
if(nn==0){
System.out.println(str);
for(int i=0;i&num.i++){
if(!f[i]){
f[i]=false;
count(num,str+num[i],nn-1);
f[i]=true;
阅读(...) 评论()

我要回帖

更多关于 java 数组排列组合 的文章

 

随机推荐