面试算法题:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

题目

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
这个题目还是网上找的。

思路

这个没什么好思路目前。想到的最通用的办法就是:先找出四个数字的其中三个,然后分别把这三个数字可以排布的顺序打印出来。
三个数字进行排布,C++会用链表,每次遍历一次链表输出一次,然后头结点断开,第二个节点成为新的头结点,然后尾节点指向原来的头结点。java里不知道用什么好,这里就用数组进行位移了,感觉特别不好,请知道的指点一下。
这个思路其实并不太好,有更好的方式请告知一下,谢谢。
至于个数是A(4,3)=4*3*2=24;

代码

public static void main(String[]args){
        int a[]={1,2,3,4};
        int N=a.length;
        int[][] b=new int[a.length][a.length-1];
        fun1234();
        select3of4(a,b);
        makeNum(b[3]);
        for (int i = 0; i < N; i++) {
            makeNum(b[i]);
        }

    }
    //4个数字中找出3个数字,这个算法应该有很多,存储方式也很多。
    private static void select3of4(int a[],int[][] b) {
        int N=a.length;
        int m,n;
        for (int i = 0; i < N; i++) {
            m=0;
            n=0;
            while(mif(m!=i){
                    b[i][n]=a[m];
                    n++;
                }
                m++;

            }
        }

    }
    //每次顺序移动一次数组,然后输出。这样可以保证不重复
    private static void makeNum(int a[]) {
        int N=a.length;
        for (int k = 0; k < N; k++) {
            for (int i = 0; i < N; i++) {
                System.out.print(a[i]);
            }
            System.out.println();
            for (int i = 0; i < N; i++) {
                System.out.print(a[N-i-1]);
            }
            System.out.println();
            flow(a);
        }
    }
    //顺序移位
    private static void flow(int a[]){
        int tmp=a[0];
        for (int i = 0; i < a.length-1; i++) {
            a[i]=a[i+1];
        }
        a[a.length-1]=tmp;
    }

上面的代码其实效率比直接算没太大优势,只是通用性强一些。比如数组改成了{a,c,e,f}这样的也能计算。

直接算的代码如下:

private static void fun1234() {
        // TODO Auto-generated method stub
        int count = 0;
        for (int x = 1; x < 5; x++) {
            for (int y = 1; y < 5; y++) {
                for (int z = 1; z < 5; z++) {
                    if (x != y && y != z && x != z) {
                        count++;
                        System.out.println(x * 100 + y * 10 + z + "   ");
                    }
                }
            }
        }

    }

你可能感兴趣的:(java面试题目最优算法)