1. 程式人生 > >演算法【最大子序列問題】

演算法【最大子序列問題】

     問題描述:

        (這個問題描述可能不太準確     是根據我個人的理解寫出來的)

         輸入一個序列的數字   求他的最大子序列   包括空集合

        例如說 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); } }