IT技術(shù)小屋

          秋風(fēng)秋雨,皆入我心

            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],
            []
          ]

          由于元素中可能存在重復(fù),因此較之于Subset的實現(xiàn),需要加一些判斷。如果碰到了重復(fù)元素,只需要在上一次迭代新增的子集的基礎(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 閱讀(183) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 右玉县| 麟游县| 汾西县| 大埔县| 金川县| 邵武市| 柞水县| 信丰县| 洪江市| 错那县| 枣强县| 漾濞| 高碑店市| 溧阳市| 沁阳市| 竹山县| 凤冈县| 云南省| 高碑店市| 葫芦岛市| 河间市| 荣昌县| 莱州市| 买车| 若尔盖县| 胶南市| 灵石县| 芦山县| 化德县| 宾阳县| 宜兰市| 喜德县| 平陆县| 五华县| 西乡县| 右玉县| 乌拉特前旗| 措勤县| 白朗县| 九龙城区| 青冈县|