(lintcode)第17題 子集
要求:給定一個含不同整數的集合,返回其所有的子集
注意事項:子集中的元素排列必須是非降序的,解集必須不包含重複的子集。
樣例
如果 S = [1,2,3]
,有如下的解:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
思路:不考慮非降序,一個個數字插進去,每一層插進去一個,每一個都有兩種情況,加進去和不加進去。就是遍歷數組裡面所有的元素,每次取出第一個list,往裡面加入,或者不加入,就有了兩種情況的list產生,再把這兩種list加進去,依次迴圈。
這樣的做法是降序的,不符合題意,但是在此處還是貼一下程式碼。
我們看到上面程式碼的錯誤樣例如下: 輸入public class Solution { /* * @param nums: A set of numbers * @return: A list of lists */ public List<List<Integer>> subsets(int[] nums) { // write your code here ArrayList<List<Integer>> res=new ArrayList<List<Integer>>(); ArrayList<Integer>list=new ArrayList<Integer>(); if(nums==null ||nums.length == 0){ return res; } res.add(list); for(int i=0;i<nums.length;i++){ for(int j=0;j<Math.pow(2,i);j++){ List<Integer>temp=res.get(0); res.remove(0); ArrayList<Integer>temp2=new ArrayList<Integer>(temp); temp2.add(temp2.size(),nums[i]); res.add(temp2); res.add(temp); } } return res; } }
[4,1,0]
輸出
[[],[0],[1],[1,0],[4],[4,0],[4,1],[4,1,0]]
期望答案
[[],[0],[0,1],[0,1,4],[0,4],[1],[1,4],[4]]
為什麼會這樣子呢,其實非降序這個要求只是一個幌子,我們只要在加入之前對陣列進行排序就可以通過啦。
程式碼如下:
public class Solution { /* * @param nums: A set of numbers * @return: A list of lists */ public List<List<Integer>> subsets(int[] nums) { // write your code here ArrayList<List<Integer>> res=new ArrayList<List<Integer>>(); ArrayList<Integer>list=new ArrayList<Integer>(); if(nums==null ){ return res; } res.add(list); Arrays.sort(nums); for(int i=0;i<nums.length;i++){ for(int j=0;j<Math.pow(2,i);j++){//每一層的個數都是2的n次方 List<Integer>temp=res.get(0); res.remove(0);//把第一個取出來 ArrayList<Integer>temp2=new ArrayList<Integer>(temp); temp2.add(temp2.size(),nums[i]); res.add(temp2);//加入一個數,放進去 res.add(temp);//不加數,放進去 } } return res; } }
相關推薦
(lintcode)第17題 子集
要求:給定一個含不同整數的集合,返回其所有的子集 注意事項:子集中的元素排列必須是非降序的,解集必須不包含重複的子集。 樣例 如果 S = [1,2,3],有如下的解: [ [3], [1], [2], [1,2,3], [1,3], [2,3],
OCP考試第17題
17. The INV_HISTORY table is created using the command: SQL>CREATE TABLE INV_HISTORY (inv_no NUMBER(3), inv_date DATE, inv_amt NUMBER(10,2)) pa
C++面向物件程式設計50道程式設計題(第17題)
C++面向物件程式設計50道程式設計題(第17題) 摘要:C++程式設計實習是為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛鍊學生的分析問題和解決問題的能力,提高學生運用所學知識解決實際問題的能力。 本專輯為程式設計入門者、高校計算機軟體
劍指offer_第17題_樹的子結構_Python
題目描述 輸入兩棵二叉樹A,B 判斷B是不是A的子結構。 其中空樹不是任意一個樹的子結構 class TreeNode: def __init__(self, x): self.val = x self.left = None
數理統計與資料分析第三版習題 第3章 第17題
以下解題過程都是由網際網路收集而來,並不保證正確,如有疑問可以留言討論 題目 令(X,Y)是隨機點,均勻地選自區域 R={(x,y):∣x∣+∣y∣≤1}R=\left\{(x,y):|x|+|y|\leq1 \right\}R={(x,y):∣x∣+∣y∣≤1
(lintcode)第29題交叉字串
比如 s1 = "aabcc" s2 = "dbbca" - 當 s3 = "aadbbcbcac",返回 true. - 當 s3 = "aadbbbaccc", 返回 false. 思路:這道題一開始我是使用三個下標分別對應3個字串,如果匹配上,那麼就會往後移一位,但是這樣就會有一個嚴
leetcode 第78題 子集 python解法(用時48ms)
leetcode 第78題 子集 python解法(用時48ms) 問題分析 該問題要求返回陣列的所有子集,一個數組子集的個數等於2的陣列長度次冪(2^(len(nums))。首先這道題有多種解法:有使用深度優先遍歷來做的,還有使用遞迴法來做,還有一種解法是使用位運算來計算。比如,陣
LeetCode第17題 電話號碼的字母組合
class Solution { public: vector<string> letterCombinations(string digits) { vector<string>ans; if(digits.s
(lintcode)第14題二分查詢
要求:給定一個排序的整數陣列(升序)和一個要查詢的整數target,用O(logn)的時間查詢到target第一次出現的下標(從0開始),如果target不存在於陣列中,返回-1。 樣例:在陣列 [1, 2, 3, 3, 4, 5, 10] 中二分查詢3,返回2。 思路:使
LeetCode 第17題電話號碼的字母組合
i++ color link 17. ear else return void arr /*17. 電話號碼的字母組合給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。給出數字到字母的映射如下(與電話按鍵相同)。註意 1 不對應任何字母。輸入:"23"輸出:
leetcode第17題——**Letter Combinations of a Phone Number
題目 Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just li
(lintcode)第3題統計數字
要求:計算數字k在0到n中的出現的次數,k可能是0~9的一個值。樣例例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我們發現1出現了5次
OCP-1Z0-051 第17題 null參與運算後仍是null
SQL> SELECT ename||' joined on '||hiredate|| 2 ', the total compensation paid is '|| 3 TO_CHAR(ROUND(ROUND(SYSDATE-hiredate)/365) * sal +
復旦大學2017--2018學年第二學期(17級)高等代數II期末考試第七大題解答
-- 大學 for 其中 白皮書 $$ all 9.1 參考 七、(本題10分) 設 $A_1,A_2,\cdots,A_m$ 為 $n$ 階實對稱陣, 其中 $A_1$ 為正定陣, 並且對任意的 $2\leq i<j\leq m$, $A_iA_1^{-1}A_j
【吳恩達】機器學習第17章推薦系統以及ex8推薦系統程式設計題
1.基於內容的推薦系統 以電影推薦為例,先介紹以下引數: r(i,j)表示使用者j對於電影i是否進行了評分。1表示已經評分,0表示沒有評分。 表示使用者j對電影i的評分情況。總共1-5分。 表示對使用者j喜愛電影題材的描述情況.比如(0,5,0)表示每列分別對應玄
HDU 6172 Array Challenge (打表找規律+矩陣快速冪 17多校第十場第2題)
題目連結 題意 分析 不得不佩服AC這道題的人腦洞,為什麼你們這麼熟練。。。打表找規律無所不能。 因為我們無法處理開方的取模問題,因此我們不能一步步求。我們令fn=⌊an−−√⌋,則打表
計蒜客--第28題:等和的分隔子集
第28題:等和的分隔子集 時間限制 1000 ms 記憶體限制 10000 K 曉萌希望將1到N的連續整陣列成的集合劃分成兩個子集合,且保證每個集合的數字和是相等。例如,對於N=3,對應的集合{1,2,3}能被劃分成{3} 和 {1,2}兩個子集合. 這兩
OCP-1Z0-051-題目解析-第16題
blog ror cau 花括號 pan 使用 data eval from 16. Evaluate the following query: SQL> SELECT promo_name q‘{‘s start date was }‘ promo_begi
OCP-1Z0-051-題目解析-第21題
spa true div 一個 swe ron column examine ons 21. Examine the description of the EMP_DETAILS table given below: name NULL
全排列(洛谷1061 Jam的計數法or NOIP 2006 普及組 第三題)
div 順序 pre highlight 格式 其中 字符 是個 true Jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文字母計數,他覺得這樣做,會使世界更加豐富多彩。 在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按