之前有人问了我这样一个题目
输入一串数字字符,然后输出该字符内所有数字的排列组合。
例如:输入123,输出123,132,213,312,231,321
先在此声明一下,本人也在学习编程的道路上前进,若有错误请指正,共同进步
解题思路:
我是这么想的,直接处理字符,肯定不好处理,所以需要转换成数组,先用String类型的toCharArray方法,将数字字符转化为char[]类型数组,处理数组肯定比处理字符串要好很多
我输出数字的排列组合的想法是
比如这里有一个数组char[] a={'1','2','3'};
我们先把‘1’固定在第0位,这样数组内第1位可供分配的元素就两个2和3
然后再把2固定在第1位,这样3就是最后一位,不用分配了,得到第一种排列方式123
在1固定在第0位,2固定过第1位的前提下,轮到3固定在第1位,2则是分配到第2位,得到第二种排列方式132
同理,1在第0位的情况处理完了,接下来处理2在第0位的情况,根据上面的处理方法得到213和231,3在第0位的处理方式同理
由此我们得到123所有排列方式是123,132,213,231,312,321
代码实现:
import java.util.Scanner;
public class Test03 {
public static char[] arrz; //设置静态变量
public static int index=0; //给排列方法计数
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一串字符串(纯数字):");
char [] arr=strToArray(sc.next());
System.out.println("输出以上数字的所有排列组合:");
arrz=new char[arr.length]; //静态变量初始化
sortArr(arr);
}
//打印数组
public static void printInt(char[] arr){
for(int i=0;i



