今天面试遇到这个笔试题,大家看看该怎么做?
给定一个数组比如:int[] arr = {1,3,2};
全排列,把所有的组合打印出来
结果就是:
123
132
213
231
......
给定一个数组比如:int[] arr = {1,3,2};
全排列,把所有的组合打印出来
结果就是:
123
132
213
231
......
解决方案 »
- 想做个灵活可随意扩展的后台模板
- 高手帮忙看下这段代码哪里有错误要怎么改,谢了。
- JSP的关于购物车的一个小问题。麻烦高手给解决下
- 如何给用户自动安装JDK环境?
- 公文流转痕迹保留时如何通过控件打开指定文档?再线等?高分送
- 升到一个"*",要多少专家分!!
- 网页端实现在线编译功能
- 请问能否在web里设定某些目录只能从JSP/Servelet里访问,而不能直接在网址里填上? (jboss or tomcat)
- 请各位大侠救命!关于tomcat的设置问题!分不够可以再加分的!
- hibernate一对多新增多方数据
- 请问网上是否有那种收网站的
- 求教在struts2的框架里 怎样将jsp页面的list对象传递至Action?????????????
public static void main(String[] args){
int[] a={1,2,3};
int length=a.length;
for(int i=0;i<length;i++){
for(int j=0;j<length;j++){
if(j==i)
continue;
for(int k=0;k<length;k++){
if(k==j || k==i)
continue;
System.out.println(""+a[i]+a[j]+a[k]);
}
}
}
}
}
public class AllLinage
{ public static void main(String[] args)
{
rank("12345", "", 5);
}
public static void rank(String s, String result, int len)
{
if(result.length() == len)
{
System.out.println(result);
}
else
{
for(int i = 0; i < s.length(); i++)
{
if(result.indexOf(s.charAt(i)) < 0)
rank(s, result + s.charAt(i), len);
}
}
}}
/**
* @author yinian
*
*/import java.util.Set;
import java.util.HashSet;public class Test { /**
* @param args
*/
public static void main(String[] args)
{
int[] a = {1, 3, 1, 4, 5};
String str = toOrderString(a); /* 将数组的下标值加1组成一个无重复的新数组,如本例为{1, 2, 3, 4, 5} */
Set<String> tempSet = rank(str, "", str.length(), new HashSet<String>()); /* 对下标值加1所组成的数组进行完全排列组合,若只需取部分组合,则将str.length()改为介于0和str.length()之间的任一整数就可以了 */
Set<String> resultSet = getResult(tempSet, a); /* 将排列组合好的各组下标序列值在数组中取相应的元素值 */
System.out.println("There are " + resultSet.size() + " ways to rank the array.");
for (String string : resultSet) {
System.out.println(string);
}
}
/* 用递归方法对数组的各元素下标值加1进行长度为length的完全排列组合 */
public static Set<String> rank(String s, String temp, int length, Set<String> set)
{
if(temp.length() == length)
{
set.add(temp);
}
else
{
for(int i = 0; i < s.length(); i++)
{
if(temp.indexOf(s.charAt(i)) < 0)
set = rank(s, temp + s.charAt(i), length, set);
}
}
return set;
}
public static String toOrderString(int[] a) {
String str = new String("");
for (int i = 0; i < a.length; i++) {
str += (i + 1);
}
return str;
}
/* 将排列组合好的各组下标序列值在数组中取相应的元素值 */
public static Set<String> getResult(Set<String> set, int[] a) {
Set<String> tempSet = new HashSet<String>();
String tempStr = new String("");
for (String str : set) {
for (int i = 0; i < str.length(); i++) {
tempStr += a[Integer.parseInt(str.substring(i, i + 1)) - 1];
}
tempSet.add(tempStr);
tempStr = "";
}
return tempSet;
}
public static String toString(int[] a) {
String str = new String("");
for (int i = 0; i < a.length; i++) {
str += a[i];
}
return str;
}}输出结果为:There are 60 ways to rank the array.
41531
41153
14513
11543
34115
……(这里不全部列出来了)