题解 | #没有重复项数字的全排列#

没有重复项数字的全排列

https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型一维数组 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> permute (int[] num) {
        ArrayList<ArrayList<Integer>>  list= new ArrayList<ArrayList<Integer>> ();
        ArrayList<Integer> item=new ArrayList<Integer>();
        ArrayList<Integer> t;
        item.add(num[0]);
        list.add(item);
        //遍历要依次插入的数字
        for(int n=1;n<num.length;n++){
            //把该轮插入新数字的数字添加到addlist集合里
            ArrayList<ArrayList<Integer>>  addlist= new ArrayList<ArrayList<Integer>> ();
            // 对list集合的数组进行遍历
            for(int i=0;i<list.size();i++){
                item=new ArrayList<Integer>(list.get(i));
                //在数组尾部插入数字
                t=new ArrayList<Integer>(item);
                t.add(num[n]);
                addByOrder(addlist,t);
                //对数组进行不同位置进行遍历插入新数字,然后按字典顺序进行插入到addlist集合里
                for(int j=item.size()-1;j>=0;j--){
                    t=new ArrayList<Integer>(item);
                    t.add(j,num[n]);
                    addByOrder(addlist,t);
                }
            }
            list=addlist;
        }
        return list;
    }
    //在加入集合的时候按字典顺序进行插入
    public void addByOrder(ArrayList<ArrayList<Integer>> list,ArrayList<Integer> tar){
        boolean flg=true;
        for(int i=0;i<list.size();i++){
            ArrayList<Integer> item=list.get(i);
            for(int j=0;j<item.size();j++){
                if(tar.get(j)<item.get(j)){
                    list.add(i,tar);
                    return;
                }else{
                    break;
                }
            }
        }
        if(flg){
            list.add(tar);
        }
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务