<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[swagle的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/swagle</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; swagle]]></copyright><item><title><![CDATA[[LeetCode] Binary Tree Postorder Traversal [42]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/38323117</link><guid>https://blog.youkuaiyun.com/swagle/article/details/38323117</guid><author>swagle</author><pubDate>Thu, 31 Jul 2014 20:46:22 +0800</pubDate><description><![CDATA[题目



Binary Tree Postorder Traversal
 Total Accepted: 23797 Total
 Submissions: 76975My Submissions




Given a binary tree, return the postorder traversal of its nodes' values.
For examp]]></description><category></category></item><item><title><![CDATA[[LeetCode] Binary Tree Inorder Traversal [41]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/38322899</link><guid>https://blog.youkuaiyun.com/swagle/article/details/38322899</guid><author>swagle</author><pubDate>Thu, 31 Jul 2014 20:34:31 +0800</pubDate><description><![CDATA[题目


原题链接


解题思路


代码实现]]></description><category></category></item><item><title><![CDATA[[LeetCode] Binary Tree Preorder Traversal [40]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/38322837</link><guid>https://blog.youkuaiyun.com/swagle/article/details/38322837</guid><author>swagle</author><pubDate>Thu, 31 Jul 2014 20:21:50 +0800</pubDate><description><![CDATA[题目


原题地址]]></description><category></category></item><item><title><![CDATA[[LeetCode] Flatten Binary Tree to Linked List [39]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/38322783</link><guid>https://blog.youkuaiyun.com/swagle/article/details/38322783</guid><author>swagle</author><pubDate>Thu, 31 Jul 2014 20:16:11 +0800</pubDate><description><![CDATA[题目


原题链接(点我)


解题思路


daima]]></description><category></category></item><item><title><![CDATA[[LeetCode] Combinations [38]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30761165</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30761165</guid><author>swagle</author><pubDate>Sat, 14 Jun 2014 17:46:45 +0800</pubDate><description><![CDATA[题目


Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,
If n = 4 and k = 2, a solution is:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],]]></description><category></category></item><item><title><![CDATA[[LeetCode] Word Search [37]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30758751</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30758751</guid><author>swagle</author><pubDate>Sat, 14 Jun 2014 17:24:07 +0800</pubDate><description><![CDATA[给一个二维字符数组，给一个字符串，问该二维数组是否包含该字符串。比如一个二维数组[ ABCE SFCS ADEE ]和字符串"ABCCED"，这个就包含。解决这个问题，主要的关键是怎么解决在二维数组中查找方向，如何来标识哪些是走过的。
代码如下]]></description><category></category></item><item><title><![CDATA[[LeetCode] Search in Rotated Sorted Array II [36]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30487759</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30487759</guid><author>swagle</author><pubDate>Fri, 13 Jun 2014 15:16:39 +0800</pubDate><description><![CDATA[题目
Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
原题链接（点我）
解题思路
这题和Search in Rotated Sorted Array问题类似，]]></description><category></category></item><item><title><![CDATA[[LeetCode] Search in Rotated Sorted Array [35]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30471141</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30471141</guid><author>swagle</author><pubDate>Fri, 13 Jun 2014 11:57:59 +0800</pubDate><description><![CDATA[旋转数组中的查找。[1, 2, 3, 4, 5, 6]的一个旋转数组为[4, 5, 6, 1, 2, 3]。在旋转数组中寻找一个数。
最直接的方法，一次遍历，时间复杂度O(n)。但是既然是一个部分有序的数组，那么对于有序的部分我们可以想方法用二分查找。这个效率可以提高。
代码：
....]]></description><category></category></item><item><title><![CDATA[[LeetCode] Search for a Range [34]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30466235</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30466235</guid><author>swagle</author><pubDate>Fri, 13 Jun 2014 11:14:01 +0800</pubDate><description><![CDATA[题目
Given a sorted array of integers, find the starting and ending position of a given target value.
解题思路：
查找一个数出现的范围，给一个排好序的数组和一个数，找出这个数在数组中出现的范围。
这个题直接使用一次遍历就可以得到结果，这样的时间复杂度为O(n)。但是对于有序数组我们一般可以使用二分查找可以得到更好的O(logn)的时间复杂度。我们可以使用二分查找找到这个数第一次出现的位置和这个数最后一次出现的位]]></description><category></category></item><item><title><![CDATA[[LeetCode] Decode Ways [33]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30231807</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30231807</guid><author>swagle</author><pubDate>Thu, 12 Jun 2014 11:55:23 +0800</pubDate><description><![CDATA[题目
A message containing letters from A-Z is being encoded to numbers using the following mapping:
原题链接（点我）
解题思路及代码;
解码方法数量问题。英文26个字母对应1到26，给一串数字，问翻译为字母有多少种方法？
这个题第一思路是想到使用组合排列的方法，穷举所有的可能。很好，写出如下代码...
但是提交后出来的结果是超时。
再想想，使用动态规划的方法来做。
对于串s[0...i]的解码数量应该和s[0..]]></description><category></category></item><item><title><![CDATA[[LeetCode] Subsets II [32]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30221841</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30221841</guid><author>swagle</author><pubDate>Thu, 12 Jun 2014 10:16:02 +0800</pubDate><description><![CDATA[题目
Given a collection of integers that might contain duplicates, S, return all possible subsets.
原题链接（点我）
解题思路
这个题很subsets这个题一样，不过这里允许给出的集合中含有重复元素，对于这个条件之需要加一个判断条件就可以了，其余代码和Subsets都一样。
代码实现....]]></description><category></category></item><item><title><![CDATA[[LeetCode] Subsets [31]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30219965</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30219965</guid><author>swagle</author><pubDate>Thu, 12 Jun 2014 09:59:19 +0800</pubDate><description><![CDATA[题目
Given a set of distinct integers, S, return all possible subsets.
原题链接（点我）
解题思路
子集合问题。给一个集合 ，求出其所有的子集合。这个题也是个组合问题--老思路：递归加循环。
代码实现...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Interleaving String [30]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30057423</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30057423</guid><author>swagle</author><pubDate>Wed, 11 Jun 2014 14:59:54 +0800</pubDate><description><![CDATA[题目：交差字符串。给3个字符串s1, s2, s3，判断s3是不是由s1和s2组成的交叉字符串。
设s1长度为m, s2长度为n，判断 s3[0...m+n-1] 是不是由s1[0...m-1], s2[0...n-1]组成的交叉字符串，假设s1[m-1] == s3[m+n-1]，则只需判断s3[0...m+n-2]是不是由s1[0...m-2], s2[0...n-1]组成的交叉字符串...，依次这样判断下去。从这可以总结，这个问题可以划分为比它小的问题，这里使用动态规划应该比较合适。
dp[i][j]]]></description><category></category></item><item><title><![CDATA[[LeetCode] Distinct Subsequences [29]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30043797</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30043797</guid><author>swagle</author><pubDate>Wed, 11 Jun 2014 12:12:44 +0800</pubDate><description><![CDATA[解题思路

题目：Given a string S and a string T, count the number of distinct subsequences of T in S。
解题思路：
给两个字符串S和T, 求在字符串S中删除某些字符后得到T，问一共能有多少种删除方法？
这个题用常规方法超时。得用动态规划，动态规划最主要的就是要找到动态规划方程。
首先记：dp[i][j] 为 从S[0..j-1]中删除某些字符后得 T[0...i-1]的不同删除方法数量。
动态规划方程为： dp[i][j]]]></description><category></category></item><item><title><![CDATA[[LeetCode] Restore IP Address [28]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/30027655</link><guid>https://blog.youkuaiyun.com/swagle/article/details/30027655</guid><author>swagle</author><pubDate>Wed, 11 Jun 2014 09:45:03 +0800</pubDate><description><![CDATA[给一个字符串，将其转换成IP地址。
这个题可以理解成，将字符串切割成若干个小块，将其中合法的（数值在0-255）组合起来，拼接成一个合法的IP地址。说到这也就看出来了这还是一个组合问题，对于组合问题，算法都是结构性的递归套循环，看如下循环：]]></description><category></category></item><item><title><![CDATA[[LeetCode] Remove Duplicates from Sorted Array II [27]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/29822565</link><guid>https://blog.youkuaiyun.com/swagle/article/details/29822565</guid><author>swagle</author><pubDate>Tue, 10 Jun 2014 11:53:33 +0800</pubDate><description><![CDATA[移除数组中重复次数超过2次以上出现的数，但是可以允许重复2次。
这个题类似Remove Duplicates from Sorted Array，第一个想法很直接就是计数，超过2次的就忽略，依据这个思路的代码见代码一；
上面的思路可行，但是代码看着比较冗余，判断比较多。再来想想原来的数组，该数组是排好序的，如果一个数出现3次以上，那么必有A[i] == A[i-2]。所以根据这个关系可以写出比较精简的代码二。详见代码。]]></description><category></category></item><item><title><![CDATA[[LeetCode] Rotate Image [26]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/29810515</link><guid>https://blog.youkuaiyun.com/swagle/article/details/29810515</guid><author>swagle</author><pubDate>Tue, 10 Jun 2014 10:42:58 +0800</pubDate><description><![CDATA[题目：...
解题思路：
顺时针方向旋转数组90°。这个题也是个没啥意思的题，自己画画图，找找规律。就出来了。我举一个n=4的例子还说明下规律：
通过图可以看出A[0][0] = A[3][0],....。从这些中我们可以找到如下规律：
     A[i][j] = A[n-1-j][i];
     A[n-1-j][i] = A[n-1-i][n-1-j];
     A[n-1-i][n-1-j] = A[j][n-1-i];
     A[j][n-1-i] = A[i][j];(原来的A[i][j]]></description><category></category></item><item><title><![CDATA[[LeetCode] Search a 2D Matrix [25]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/29564491</link><guid>https://blog.youkuaiyun.com/swagle/article/details/29564491</guid><author>swagle</author><pubDate>Mon, 09 Jun 2014 11:36:19 +0800</pubDate><description><![CDATA[题目...
二维数组中的查找，这是个简单的题，根据题意可以推出，这个二维数组其实是一个有序的一维数组。解决思路也很容易想到，每次比较每一维最后一个元素，如果该元素比要找的元素小，说明这个行不可能含该元素；如果相等，那就找到了，如果最后一个元素比要找元素大，说明该元素如果出现比在这一行。然后再在这一行中就行查找（可以用顺序，也可二分）。
代码如下：]]></description><category></category></item><item><title><![CDATA[[LeetCode] Climbing Stairs [24]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/29562769</link><guid>https://blog.youkuaiyun.com/swagle/article/details/29562769</guid><author>swagle</author><pubDate>Mon, 09 Jun 2014 11:10:39 +0800</pubDate><description><![CDATA[解题思路：
爬楼梯：一次可以爬1阶或者2阶，问爬n阶楼梯有多少方法？
这是个典型的斐波拉切应用场景，我们下面来分析下：
对于1阶，只有 1 种方法, 记为f(1)；
对于2阶，记为f(2):
     最后一步只爬1阶，有 f(1);
     最后一步一次爬2阶，即一步上来，这是1中方法;
     综合下来 f(2) = f(1) +1 = 2;
对于3阶，记为f(3):
     最有一步只爬1阶，有f(2)种方法
     最后一步一次爬2阶，有f(1)种方法；
     综合下来 f(3) = f]]></description><category></category></item><item><title><![CDATA[[LeetCode] Sort Colors [23]]]></title><link>https://blog.youkuaiyun.com/swagle/article/details/29413827</link><guid>https://blog.youkuaiyun.com/swagle/article/details/29413827</guid><author>swagle</author><pubDate>Sun, 08 Jun 2014 22:19:22 +0800</pubDate><description><![CDATA[一个数组，数组元素含有3种颜色，红，白，蓝。要求将数组排序，将相同颜色排在一起，整体按照红白蓝的顺序。
这个题在日常生活中很常见。比如要将东西归类，当然这个题简化成了相同颜色就认为完全相同。
基于这个特点，可以先统计各个颜色出现的次数，然后在按照题目要求的红白蓝的顺序，依次放n个红，m个白，k个蓝，就Okay了，代码详见代码一。这个思路也就是题目下面提示的方法，这个方法需遍历2次数组，本题要求遍历一次就搞定的方法，想想这个还是有点难度的。
这个题目其实我们很容易就能联想到快排的划分上来，但是仔细一想，如果按]]></description><category></category></item></channel></rss>