原创 LeetCode 34 Search for a Range

題意: 給出有序序列,查找target在序列中出現的下標區間。 思路: 熟練使用C++的upper_bound和lower_bound…… 代碼: class Solution { public: vector<int> se

原创 LeetCode 46 Permutations + LeetCode 47 Permutations II

題意: 給出一串(46題)不重複or(47題)有重複的數字,要求輸出所有排列。 思路: 有沒有重複不影響思路 = =。 代碼展示爲46題提交結果,47題一樣過…… 可以偷懶用next_permutation方法也可以自己實現,實現方法爲

原创 LeetCode 40 Combination Sum II

題意: 集合中的每個數字只能使用一次,求出所有數字和爲target的方案。 思路: 如果把集合中的數字計數,問題會變得和 http://blog.csdn.net/houserabbit/article/details/72677176

原创 LeetCode 39 Combination Sum

題意: 數字集合中的每個數字可以使用無限次,求出所有的數字和爲給定target的方案。 思路: 如果target小的話,可以當成完全揹包問題來處理,但是target數值可能很大,所以乾脆就搜索吧= = 從大到小的搜索集合中的數字並枚舉使

原创 LeetCode 30 Substring with Concatenation of All Words

題意: 給出字符串s和許多等長(len)單詞w,找出所有s中的滿足子串爲w中所有單詞的一種組合的位置。 思路: 因爲w中的單詞要滿足的是組合而不是排列,因此用“區間[L,R]中包含單詞的計數”來維護比較合適。 一是滿足了組合對順序的不要

原创 LeetCode 33 Search in Rotated Sorted Array

題意: 一個數字環,它裏面的數字是遞增排序的,現在從任意位置把它截斷成序列,問target是否在環中出現。 思路: 一定能想到二分查找,但是這個序列並不是有序的。不過我們仍然可以創造一種二分的方式,畢竟二分的精髓是每次丟掉一般的候選集合

原创 LeetCode 36 Valid Sudoku

題意: 判斷一個填了一部分的數獨有沒有解。 思路: 按照數獨規則判斷即可,即同一行、同一列、同一個3*3的方格內沒有數字重複出現。 代碼: class Solution { public: bool isValidSudok

原创 LeetCode 37 Sudoku Solver

題意: 給出一個一定有解的填了一部分的數獨,要求填滿它。 思路: 我是分2步解決這個問題的: 第1步檢查每個格子可能填哪幾個數字,第2步dfs搜索結果。 dfs的時候只搜索第1步中找出的可能的數字,每次嘗試填入一個格子並更新當前行、當前

原创 LeetCode 42 Trapping Rain Water

題意: 給出一個代表高度的數組,求出由它組成的形狀能儲存多少體積的水。(下例中藍色表示水) 思路: 本題有O(nlogn)排序解法和O(n)單調棧解法。 排序解法——從大到小的排序數字,然後按順序放置到數軸上。因爲儲水的高度取決於一段

原创 LeetCode 50 Pow(x, n)

題意: 實現pow(x, n),即實數x的整數n次方。 思路: 快速冪算法。將指數表示成二進制,這時迭代生成x的1、2、4、16……次方,如果指數的二進制表示種某位爲1,那麼把對應x的某次方乘到答案裏。 代碼: class Solut

原创 LeetCode 32 Longest Valid Parentheses

題意: 求最長的合法的括號匹配的串長度。 思路: 如果把'('看做+1')'看做-1的話,一個合法的括號匹配序列表示成前綴和應該是+++0+++++0這種樣子,其中+表示前綴和>0。 爲了避免串的最後一部分出現+++0+++++0+++

原创 LeetCode 49 Group Anagrams

題意: 如果兩個單詞由相同字母數組成那麼它們應該分成一組,求給出單詞的分組。 思路: 爲每個單詞做字母計數,然後根據計數排序,這樣相同字母組成的單詞就會挨在一起,最後按順序分下組就行了。 代碼: #define N 26 class

原创 LeetCode 31 Next Permutation

題意: 給出一串數字,求該排列的下一個排列。如果該排列爲字典序最大排列,則輸出字典序最小排列。 思路: 首先C++裏面有求下一個排列的函數next_permutation,該函數返回0即表示當前排列字典序最大。 如果要自己動手實現,那麼

原创 LeetCode 38 Count and Say

題意: 定義一種迭代,1, 11, 21, 1211, 111221, ...,比如1211 -> 111221表示1211從左往右讀爲1個1、1個2、2個1,求迭代n輪的結果。 思路: 用string暴力模擬迭代過程,不推薦迭代計數x

原创 LeetCode 43 Multiply Strings

題意: 輸入2個表示非負數的字符串,求它們的乘積。 思路: 暴力模擬吧!!19ms能過。 我利用單個位置上數字只有10個來優化乘法次數,效率能提高到9ms。 代碼: /** * 利用數字個數優化 9ms */ class Sol