一、题目
二、代码
class Solution
{
//提交里面无法比对,执行里面可以比对
List<List<Integer>> re_list = new LinkedList<>();
LinkedList<Integer> path = new LinkedList<>();
public void back(int[] nums, int start, int path_length)
{
int i;
int length;
length = nums.length;
int last_num = Integer.MAX_VALUE;
LinkedList<Integer> last_number = new LinkedList<>();
for(i=start;i<length;i++)
{
//同层不能相等
//用个list去存lastnum
// if(last_num==nums[i]) continue;
if(path.size()!=0&&nums[i]<path.get(path.size()-1)) continue;
if(last_number.contains(nums[i]) == false) last_number.add(nums[i]);
else continue;
path.add(nums[i]);
// last_num = nums[i];
path_length = path_length+1;
if(path_length>=2)
{
re_list.add(new LinkedList<>(path));
}
back(nums,i+1,path_length);
path.removeLast();
path_length = path_length-1;
}
}
public List<List<Integer>> findSubsequences(int[] nums)
{
back(nums,0,0);
return re_list;
}
}
三、运行结果
四、附录
二刷
class Solution
{
List<List<Integer>> re = new LinkedList<>();
List<Integer> path = new LinkedList<>();
public void track(int[] nums,int start)
{
int i;
int length = nums.length;
int length_path = path.size();
List<Integer> have = new LinkedList<>();
if(length_path>=2) re.add(new LinkedList<>(path));
for(i=start;i<length;i++)
{
//仍旧是同层去重
//if(i>start&&nums[i]==nums[i-1]) continue;
if(have.contains(nums[i]) == false)
{
if(length_path==0)
{
path.add(nums[i]);
have.add(nums[i]);
track(nums,i+1);
path.removeLast();
//have.removeLast();
}
else
{
if(nums[i]>=path.get(length_path-1))
{
path.add(nums[i]);
have.add(nums[i]);
track(nums,i+1);
path.removeLast();
// have.removeLast();
}
}
}
}
}
public List<List<Integer>> findSubsequences(int[] nums)
{
track(nums,0);
return re;
}
}