没有重复项数字的全排列

使用一个list,对数组进行排序。 在函数中首先就是终止条件判断,之后用一个for数组进行遍历,交换,递归调用,在回溯即可。

public void swap(ArrayList<Integer> list,int i,int index){

        int temp=list.get(i);
        list.set(i,list.get(index));
        list.set(index,temp);

    }

    public void recure(ArrayList<ArrayList<Integer>> lists,ArrayList<Integer> list,int index){

        if(index==list.size()-1) lists.add(list);

        for (int i=index;i<list.size();i++){
            swap(list,i,index);
            recure(lists,list,index+1);
            swap(list,i,index);
        }


    }




    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        Arrays.sort(num);
        ArrayList<ArrayList<Integer>> lists=new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> list=new ArrayList<Integer>();
        for (int i=0;i<num.length;i++){
            list.add(num[i]);
        }
        recure(lists,list,0);
        return lists;


    }




全部评论

相关推荐

Cassifa:发的字比你都多的一律视为骗子或者想白嫖压榨实习生的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务