问题描述:
(这个问题描述可能不太准确 是根据我个人的理解写出来的)
输入一个序列的数字 求他的最大子序列 包括空集合
例如说 1 , 2 ,3
那么他的子序列就是 【 [1,2,3] [1,2] [1,3] [2,3] [ 1 ] [2 ] [3] [] 】
我的解决思路是通过递归调用
1. 每个元素有两种状态,一种状态是取当前元素,一种状态是不取当前元素 所以需要 一个单独的辅助数组 用来记录当前元素是否取
取完所有取当前元素的子情况,就获取所有不取当前元素的子情况
2. 需要一个索引记录 当前循环到的层数,如果获取完所有元素就添加到List中
代码:
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static boolean v[] = new boolean[100];
public static List<List<Integer>> ans = new ArrayList<List<Integer>>();
public void robot(int idx, int[] nums) {
if (idx >= nums.length) {
List<Integer> r = new ArrayList<Integer>();
for (int i = 0; i < nums.length;i++) {
if (v[i]) {
r.add(nums[i]);
}
}
ans.add(r);
return;
}
//这个是取当前元素的所有结果
v[idx] = true;
robot(idx+1,nums);
//这个是不取当前元素的所有结果
v[idx] = false;
robot(idx+1,nums);
}
public List<List<Integer>> subsets(int [] nums)
{
ans.clear();
robot(0, nums);
return ans;
}
public static void main(String[] args) {
for (int i = 0; i < v.length; i++) {
v[i] = false;
}
int [] nums = new int [3];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
Solution solution = new Solution();
List<List<Integer>> list = solution.subsets(nums);
System.out.println(list);
}
}