题解 | Java-回溯-#有重复项数字的所有排列#

有重复项数字的所有排列

http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863

import java.util.*;

public class Solution {
    LinkedList<Integer> tmp = new LinkedList<>();
    ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
        int n = num.length;
        Arrays.sort(num); // 排序方便字典序上升
        dfs(num);
        return res;
    }
    
    public void dfs(int[] num){
        int n = num.length;
        if (tmp.size() == n) { // 递归出口
            ArrayList<Integer> list = new ArrayList<>();
            for (int i : tmp) {
                list.add(num[i]);
            }
            res.add(list);
            return;
        }
        boolean[] visit = new boolean[7]; // -1 --> 5 。记录该层此数字有没有被遍历过
        for (int i = 0; i < n; ++i) {
            if (tmp.contains(i) || visit[num[i] + 1]) continue;
            tmp.add(i);
            visit[num[i] + 1] = true;
            dfs(num);
            tmp.removeLast();
        }
    }
}
全部评论

相关推荐

合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务