leetcode做题记录0047

leetcode 0047

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

思路

跟上一题差不多,虽然元素可能重复,但是索引不会重复,安索引来往list里添加元素。

但是这样还是可能会有重复,最后做一个查重就行了。

class Solution {
    public List<List<Integer>> permuteUnique(int[] nums) {
		List<List<Integer>> ls = new ArrayList<List<Integer>>();
		List<Integer> l = new ArrayList<Integer>();
		List<Integer> index = new ArrayList<Integer>();
		getRange(ls, l, nums, index);
		System.out.println(ls);
		return ls;
	}

	public void getRange(List<List<Integer>> ls, List<Integer> l, int[] nums, List<Integer> index) {
		if (l.size() == nums.length && !hasSameList(ls, l)) {
			ArrayList<Integer> copyL = new ArrayList<Integer>();
			for (int i : l) {
				copyL.add(i);
			}
			ls.add(copyL);
			return;
		}

		for (int i = 0; i < nums.length; i++) {
			if (index.contains(i)) {
				continue;
			}
			l.add(nums[i]);
			index.add(i);
			getRange(ls, l, nums, index);
			index.remove(index.size() - 1);
			l.remove(l.size() - 1);
		}
	}

	public boolean hasSameList(List<List<Integer>> ls, List<Integer> l) {
		for (List<Integer> ll : ls) {
			boolean flag = true;
			for (int i = 0; i < l.size(); i++) {
				if (l.get(i) != ll.get(i)) {
					flag = false;
					break;
				}
			}
			if (flag) {
				return flag;
			}
		}
		return false;
	}
}
发布了77 篇原创文章 · 获赞 1 · 访问量 2046

猜你喜欢

转载自blog.csdn.net/Paul_1i/article/details/105328544