原创 LeetCode 48 Rotate Image

題意: 將一個正方形矩陣順時針旋轉90度。 思路: 2種方式—— 1.正常想法 —— 先對角線對稱,再左右對稱。 代碼9ms。 2.迷之規律 —— 在正方形裏面畫一個叉,分成的4個三角形相互替換。 代碼6ms。 代碼: /** *

原创 LeetCode 52 N-Queens II

題意: n皇后問題,與 http://blog.csdn.net/houserabbit/article/details/72758088 不同,本題指數出解的個數,不要求方案。 思路: 可以用一下比LeetCode 51更優化的搜索方

原创 LeetCode 69 Sqrt(x)

題意: 不使用sort(x),實現求x的平方根。 思路: 二分搜索x…… 代碼: class Solution { public: int mySqrt(int x) { if (x == 0 || x ==

原创 LeetCode 59 Spiral Matrix II

題意: 畫出n*n的蛇形矩陣。 思路: 與 http://blog.csdn.net/houserabbit/article/details/72763411 一致,更簡單一點,因爲它是正方形…… 這題還可以擴展,因爲如果不是讓畫出矩陣

原创 LeetCode 70 Climbing Stairs

題意: 每次邁步可以跨越1或2個臺階,問爬n階臺階的方案有幾種。 思路: 簡單的dp題,dp[i]表示爬n階臺階的方案數,則dp[i] = dp[i - 1] + dp[i - 2]。而且爲了優化空間,dp數組可以滾動。 代碼: cl

原创 LeetCode 68 Text Justification

題意: 給出許多單詞和一行能顯示的最大長度,將所有單詞按照兩端對齊的方式進行排版,最後一行左對齊並用空格補齊長度。 思路: 一行一行的排版,每一行檢查最多能放幾個單詞,即先假設單詞之間只用1個空格分隔。 確定了一行要顯示的單詞數後,判斷

原创 LeetCode 54 Spiral Matrix

題意: 給出一個數字矩陣,要求從左上角開始蛇形輸出。 思路: 可以這樣想,對於一個矩陣,每次輸出都是它最外層的一圈,迭代着做。即從當前圈的左上角先到右上角再到右下角最後到左下角。 代碼: class Solution { public

原创 LeetCode 53 Maximum Subarray

題意: 給出一個數字數組,求其中和最大的子串。 思路: 經典的dp題。 對於一個數字,要麼把它合併到了之前開始的某個串中,要麼從它開始一段新的串。所以,用dp[i]表示包含第i個數字的最大子串和,則dp[i] = max(dp[i -1

原创 LeetCode 64 Minimum Path Sum

題意: 在數字矩陣中,每次行動向下或向右走一格,問從左上角到右下角的路徑中數字和最小的是多少。 思路: 和 http://blog.csdn.net/houserabbit/article/details/72822932 的dp幾乎一

原创 LeetCode 58 Length of Last Word

題意: 求一個一串字符中,最後一個單詞的長度。 思路: 巨無聊一個題…… 從尾開始去掉空格,這時開始計數字母,直到串的頭或者遇到空格爲止。 代碼: class Solution { public: int lengthOfLa

原创 LeetCode 67 Add Binary

題意: 兩個二進制數相加,輸出結果 思路: 各種模擬均可,比如先把A和B倒過來,再按位相加,最後把結果再倒回來。 不過爲了快,我是這樣做的——假設A比B長,那麼我對位相加B的長度。這時如果沒有進位,那麼A長出B的部分就不會變了;如果有進

原创 LeetCode 65 Valid Number

題意: 給定一個字符串,判斷它是不是一個數字。 思路: 首先要把字符串頭尾的空格去掉。 接着可以分2種數字表示方法討論,1.普通寫法 2.科學計數法。 普通寫法判斷依據爲,一定要有數字出現,一定沒有0123456789+-.之外的字符出

原创 LeetCode 60 Permutation Sequence

題意: 輸入數字n和k,n表示給出數組[1, 2, 3, 4 ... n],輸出這個數組的第k個排列。 思路: 這種題目和“使用一些數字,找出它們能組成的第k小的數字”是一樣的,很典型的數位dp問題。 假設我們已經確定了前i - 1位,

原创 LeetCode 63 Unique Paths II

題意: 給出一個帶有障礙物的棋盤,每次行動向下或向右移動一格,求從左上角到右下角有幾種方案。 思路: 簡單dp題,假設dp[i][j]表示第i行第j列的方案數,那麼狀態轉移方程就爲 dp[i][j] = dp[i - 1][j] + d

原创 LeetCode 61 Rotate List

題意: 將鏈表旋轉k次,每次旋轉表示爲1->2->...->N變爲N->1->2->...->N-1。 思路: 首先要測鏈表總長度n,因爲k如果比n大,那麼旋轉整圈是沒意義的。 然後求出實際要旋轉的次數x,最後就是簡單的鏈表在n-x分割