输出{1,2,2,3,4,5}排列组合,4不能在第三位,3和5不能相邻

来源:互联网 发布:arm linux gcc 安装 编辑:程序博客网 时间:2024/05/01 06:25
package com.hello;import java.util.HashSet;import java.util.Set;/* * @author 张春蕾 * 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻 * 本题目的解决时我自己的思路,不知道最总结果是否正确,若不正确请谅解 * 不使用循环递归,忘了是哪个公司的笔试题了 */public class HelloJava{public static void main(String[] args){int[] a = {1,2,2,3,4,5};Set<String> set = getSet(a);for(String s: set){//循环遍历取出每个字符串进行判断if(s.indexOf('4') != 2){//4不能在第三位if(s.indexOf("35")==-1 && s.indexOf("53")==-1){//3和5不能相邻System.out.println(s);}}}}private static Set<String> getSet(int[] a) {Set<String> set = new HashSet<String>();String s = null;for(int i=0;i<a.length;i++){//循环遍历一次,取出每一个数做第一个数for(int j=0;j<a.length;j++){//在取下一个数做第二个数s = getSortString(a,i,j);set.add(s);//使用set容器可以自动对重复的数据进行过滤}}return set;}public static String getSortString(int[]a,int i,int j){String strFinal = "";if(i == j){//判断是否相等,若想等,则直接输出for(int k=0;k<a.length;k++){strFinal = strFinal + a[k];}}else{//若不想等,则进行交换int[] n = a;n[i]=n[i]^n[j];n[j]=n[i]^n[j];n[i]=n[i]^n[j];for(int k=0;k<a.length;k++){strFinal = strFinal +a[k];}}return strFinal;//返回最终字符串}}
输出结果为:
345122122345125234145223451322451232512423245123312245212345345212152234512234341252541223513422