IT技術(shù)小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
          Given a collection of integers that might contain duplicates, S, return all possible subsets.
          Note:
          Elements in a subset must be in non-descending order.
          The solution set must not contain duplicate subsets.
          For example,
          If S = [1,2,2], a solution is:
          [
            [2],
            [1],
            [1,2,2],
            [2,2],
            [1,2],
            []
          ]

          由于元素中可能存在重復,因此較之于Subset的實現(xiàn),需要加一些判斷。如果碰到了重復元素,只需要在上一次迭代新增的子集的基礎(chǔ)上再進行迭代即可。實現(xiàn)代碼如下:
           1 public class SubsetsII {
           2     public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) {
           3         ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
           4         ArrayList<ArrayList<Integer>> lastLevel = null;
           5         ret.add(new ArrayList<Integer>());
           6         Arrays.sort(num);
           7         for (int i = 0; i < num.length; i++) {
           8             ArrayList<ArrayList<Integer>> tmp = new ArrayList<ArrayList<Integer>>();
           9             ArrayList<ArrayList<Integer>> prev = i == 0 || num[i] != num[i - 1] ? ret : lastLevel;
          10             for (ArrayList<Integer> s : prev) {
          11                 ArrayList<Integer> newSet = new ArrayList<Integer>(s);
          12                 newSet.add(num[i]);
          13                 tmp.add(newSet);
          14             }
          15             ret.addAll(tmp);
          16             lastLevel = tmp;
          17         }
          18         return ret;
          19     }
          20 }
          posted on 2014-01-03 16:40 Meng Lee 閱讀(189) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 涟水县| 马山县| 西吉县| 汾阳市| 仲巴县| 杭州市| 花垣县| 阳原县| 东港市| 稻城县| 伽师县| 砚山县| 怀柔区| 临泽县| 邛崃市| 大新县| 民勤县| 宣武区| 富源县| 元谋县| 台州市| 马边| 麦盖提县| 皋兰县| 安阳市| 那曲县| 霍林郭勒市| 通州区| 于都县| 宜君县| 江陵县| 黑水县| 阳原县| 新巴尔虎右旗| 古浪县| 麦盖提县| 铜山县| 北宁市| 阿拉善盟| 武陟县| 新安县|