列举1 2 3组成数字的所有组合 RT, 从小到大列出123 132 213 231 312 321想了一上午,没想出方法,高手帮帮我 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for(int i=1;i<4;i++){ for(int j=1;j<4;j++) { for(int k=1;k<4;k++) { if(i!=j && j!=k && i!=k) { System.out.println(i+""+j+""+k); } } }} int[] num = {1,2,3};for(int i = 0;i < 3;i++){ System.out.print(num[i]); for(int j = 0;j < 3;j++){ if(j != i){ System.out.print(num[j]); System.out.println(num[3-i-j]); } }} // nums为输入可选数集合,count输出其中几个 public static void printCom(int[] nums, int count) { innerPriCom(nums, count, 0, count); } private static void innerPriCom(int[] nums, int count, int foIndex, int lgIndex) { if (foIndex == count) { for (int i = 0; i < count; i++) { System.out.print(nums[i] + " "); } System.out.println(); return; } innerPriCom(nums, count, foIndex + 1, lgIndex); for (int i = lgIndex; i < nums.length; i++) { nums[foIndex] ^= nums[i]; nums[i] ^= nums[foIndex]; nums[foIndex] ^= nums[i]; innerPriCom(nums, count, foIndex + 1, i + 1); nums[foIndex] ^= nums[i]; nums[i] ^= nums[foIndex]; nums[foIndex] ^= nums[i]; } }这是个扩张了点的方法 可以指定使用数组中几个数字 public class Test { public static void main(String[] args) { for(int i=1;i<4;i++){ for(int j=1;j<4;j++){ for(int k=1;k<4;k++){ if(i==j||i==k||j==k) continue; else System.out.println(i*100+j*10+k); } } } }} 我在4楼贴错代码了 那个是组合下边这个是楼主要求的排列 public static void combination(int[] arr){ comCombination(arr, 0); } private static void comCombination(int[] arr, int index) { if (index == arr.length - 1) { for (int i = 0; i < arr.length; i++) { System.out.printf("%d",arr[i]); } System.out.println(); return; } comCombination(arr, index + 1); for (int i = index + 1; i < arr.length; i++) { arr[index] ^= arr[i]; arr[i] ^= arr[index]; arr[index] ^= arr[i]; comCombination(arr, index + 1); arr[index] ^= arr[i]; arr[i] ^= arr[index]; arr[index] ^= arr[i]; } } 可以用3个for loopspublic class Bigger { public static void main(String[] args) { // TODO Auto-generated method stub int[] array = new int[3]; for (int i = 1; i <= 3; i++) { array[0] = i; for (int j = 1; j <= 3; j++) { if (j != i) { array[1] = j; } else continue; for (int k = 1; k <= 3; k++) { if (k != i && k != j) { array[2] = k; for (int m = 0; m < 3; m++) { System.out.print(array[m] + " "); } System.out.println(" "); } } } } }} import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Test { public static void main(String[] args){ int[] num={1,2,3}; List<Integer> list=new ArrayList<Integer>(); for(int i=0;i<num.length;i++){ for(int j=0;j<num.length;j++){ if(j!=i){ list.add(num[i]*100+num[j]*10+num[3-i-j]); } } } Collections.sort(list); for(int i=0;i<list.size();i++){ System.out.print(list.get(i)+" "); } }} 三楼答案有问题啊!用层循环就可以了int[]x={1,2,3}; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(i!=j) { //System.out.println(x[i]+""+x[j]); for(int k=0;k<3;k++) { if(k!=i&&k!=j) { System.out.println(x[i]+""+x[j]+""+x[k]); } } } } } 谢谢提醒!改下输入语句的位置就可以了 int[] num = {1,2,3}; for(int i = 0;i < 3;i++){ for(int j = 0;j < 3;j++){ if(j != i){ System.out.println(num[i]+""+num[j]+""+num[3-i-j]); } } } 二叉树的遍历 哥们帮帮忙,关于String Split拆分“||”的问题 关于String类的部分方法的具体实现 系统命令问题: 怎样学好java 字符转换问题,如何转换? 关于rmi服务端的一个问题,请各位大虾帮忙! 给我提供几个国外比较好的------JAVA的论坛吧。我想去看看 怎么样四舍五入浮点数? JB4安装完。运行时出现Failed to start Java VM:2 。怎么办!系统WIN2000pro。 关于hibernate实时读取数据的问题(着急!) 关于数字排列问题
{
for(int j=1;j<4;j++)
{ for(int k=1;k<4;k++)
{
if(i!=j && j!=k && i!=k)
{
System.out.println(i+""+j+""+k);
}
}
}
}
int[] num = {1,2,3};
for(int i = 0;i < 3;i++){
System.out.print(num[i]);
for(int j = 0;j < 3;j++){
if(j != i){
System.out.print(num[j]);
System.out.println(num[3-i-j]);
}
}
}
// nums为输入可选数集合,count输出其中几个
public static void printCom(int[] nums, int count) {
innerPriCom(nums, count, 0, count);
} private static void innerPriCom(int[] nums, int count, int foIndex,
int lgIndex) {
if (foIndex == count) {
for (int i = 0; i < count; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
return;
}
innerPriCom(nums, count, foIndex + 1, lgIndex);
for (int i = lgIndex; i < nums.length; i++) {
nums[foIndex] ^= nums[i];
nums[i] ^= nums[foIndex];
nums[foIndex] ^= nums[i];
innerPriCom(nums, count, foIndex + 1, i + 1);
nums[foIndex] ^= nums[i];
nums[i] ^= nums[foIndex];
nums[foIndex] ^= nums[i];
}
}这是个扩张了点的方法
可以指定使用数组中几个数字
public class Test {
public static void main(String[] args) {
for(int i=1;i<4;i++){
for(int j=1;j<4;j++){
for(int k=1;k<4;k++){
if(i==j||i==k||j==k)
continue;
else
System.out.println(i*100+j*10+k);
}
}
}
}
}
下边这个是楼主要求的排列 public static void combination(int[] arr){
comCombination(arr, 0);
}
private static void comCombination(int[] arr, int index) {
if (index == arr.length - 1) {
for (int i = 0; i < arr.length; i++) {
System.out.printf("%d",arr[i]);
}
System.out.println();
return;
}
comCombination(arr, index + 1);
for (int i = index + 1; i < arr.length; i++) {
arr[index] ^= arr[i];
arr[i] ^= arr[index];
arr[index] ^= arr[i];
comCombination(arr, index + 1);
arr[index] ^= arr[i];
arr[i] ^= arr[index];
arr[index] ^= arr[i];
}
}
// TODO Auto-generated method stub
int[] array = new int[3];
for (int i = 1; i <= 3; i++) {
array[0] = i;
for (int j = 1; j <= 3; j++) {
if (j != i) {
array[1] = j;
}
else
continue;
for (int k = 1; k <= 3; k++) {
if (k != i && k != j) {
array[2] = k;
for (int m = 0; m < 3; m++) {
System.out.print(array[m] + " ");
}
System.out.println(" ");
}
}
}
} }}
import java.util.Collections;
import java.util.List;public class Test {
public static void main(String[] args){
int[] num={1,2,3};
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<num.length;i++){
for(int j=0;j<num.length;j++){
if(j!=i){
list.add(num[i]*100+num[j]*10+num[3-i-j]);
}
}
}
Collections.sort(list);
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
}}
用层循环就可以了
int[]x={1,2,3};
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i!=j)
{
//System.out.println(x[i]+""+x[j]);
for(int k=0;k<3;k++)
{
if(k!=i&&k!=j)
{
System.out.println(x[i]+""+x[j]+""+x[k]);
}
}
}
}
}
改下输入语句的位置就可以了 int[] num = {1,2,3};
for(int i = 0;i < 3;i++){
for(int j = 0;j < 3;j++){
if(j != i){
System.out.println(num[i]+""+num[j]+""+num[3-i-j]);
}
}
}