说明
- 《剑指Offer》书中所有题目的答案是C++语言编写的。本人在牛客网上做题时,用Python编写了一套答案,整理如下。
- 《剑指Offer》在线刷题网址:牛客网-剑指Offer
- 牛客网上的剑指Offer题目有一点需要说明:题目不是完全一样,具体要求有点小的改动。不知道是故意为之,还没认真输入题目。
题目
二维数组中的查找
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># 借助于in</span> <span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># array 二维列表</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">Find</span><span class="hljs-params">(self, array, target)</span>:</span> <span class="hljs-comment"># write code here</span> flag = <span class="hljs-keyword">False</span> <span class="hljs-keyword">for</span> index <span class="hljs-keyword">in</span> range(len(array)): <span class="hljs-keyword">if</span> target <span class="hljs-keyword">in</span> array[index]: flag = <span class="hljs-keyword">True</span> <span class="hljs-keyword">return</span> flag</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># 线性复杂度</span> <span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># array 二维列表</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">Find</span><span class="hljs-params">(self, array, target)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-comment"># 标识变量</span> found = <span class="hljs-keyword">False</span> <span class="hljs-comment"># 检查输入 None,空数组</span> <span class="hljs-keyword">if</span> array == <span class="hljs-keyword">None</span>: <span class="hljs-keyword">return</span> found nRow = len(array) nCol = len(array[<span class="hljs-number">0</span>]) <span class="hljs-comment"># 右上角位置</span> row = <span class="hljs-number">0</span> col = nCol-<span class="hljs-number">1</span> <span class="hljs-comment"># 从右上角遍历</span> <span class="hljs-keyword">while</span> (row<nRow) <span class="hljs-keyword">and</span> (col>=<span class="hljs-number">0</span>): <span class="hljs-keyword">if</span> array[row][col] == target: found = <span class="hljs-keyword">True</span> <span class="hljs-keyword">break</span> <span class="hljs-keyword">elif</span> array[row][col] > target: col = col-<span class="hljs-number">1</span> <span class="hljs-keyword">else</span>: row = row+<span class="hljs-number">1</span> <span class="hljs-keyword">return</span> found</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul>
替换空格
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># 线性空间复杂度</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># s 源字符串</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">replaceSpace</span><span class="hljs-params">(self, s)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">if</span> s == <span class="hljs-keyword">None</span>: <span class="hljs-keyword">return</span> <span class="hljs-keyword">None</span> <span class="hljs-keyword">if</span> len(s) == <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> <span class="hljs-string">''</span> result = <span class="hljs-string">''</span> <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> s: <span class="hljs-keyword">if</span> item.isspace(): result = result+<span class="hljs-string">'%20'</span> <span class="hljs-keyword">else</span>: result = result+item <span class="hljs-keyword">return</span> result</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># s 源字符串</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">replaceSpace</span><span class="hljs-params">(self, s)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">return</span> s.replace(<span class="hljs-string">' '</span>, <span class="hljs-string">'%20'</span>)</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>
从头到尾打印链表
- 第一种方法:使用insert()方法
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># 返回从尾部到头部的列表值序列,例如[1,2,3]</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">printListFromTailToHead</span><span class="hljs-params">(self, listNode)</span>:</span> <span class="hljs-comment"># write code here</span> L = [] head = listNode <span class="hljs-keyword">while</span> head: L.insert(<span class="hljs-number">0</span>, head.val) head = head.next <span class="hljs-keyword">return</span> L</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li></ul>
- 第二种方法:使用append()和reverse()
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># 假定是个栈结构,append移动元素少</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># 返回从尾部到头部的列表值序列,例如[1,2,3]</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">printListFromTailToHead</span><span class="hljs-params">(self, listNode)</span>:</span> <span class="hljs-comment"># write code here</span> L = [] head = listNode <span class="hljs-keyword">while</span> head: L.append(head.val) head = head.next L.reverse() <span class="hljs-keyword">return</span> L</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul>
重建二叉树
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class TreeNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.left = None</span> <span class="hljs-comment"># self.right = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># 返回构造的TreeNode根节点</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">reConstructBinaryTree</span><span class="hljs-params">(self, pre, tin)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">if</span> (len(pre) == <span class="hljs-number">0</span>) <span class="hljs-keyword">or</span> (len(tin) == <span class="hljs-number">0</span>): <span class="hljs-keyword">return</span> <span class="hljs-keyword">None</span> rootValue = pre[<span class="hljs-number">0</span>] root = TreeNode(rootValue) <span class="hljs-keyword">if</span> len(pre)==<span class="hljs-number">1</span>: <span class="hljs-keyword">return</span> root rootTinIndex = <span class="hljs-number">0</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(tin)): <span class="hljs-keyword">if</span> tin[i] == rootValue: rootTinIndex = i preStart = <span class="hljs-number">1</span> preEnd = rootTinIndex+<span class="hljs-number">1</span> tinStart = <span class="hljs-number">0</span> tinEnd = rootTinIndex <span class="hljs-keyword">if</span> rootTinIndex > <span class="hljs-number">0</span>: root.left = self.reConstructBinaryTree(pre[preStart:preEnd], tin[tinStart:tinEnd]) <span class="hljs-keyword">if</span> rootTinIndex < len(pre): root.right = self.reConstructBinaryTree(pre[preEnd:], tin[tinEnd+<span class="hljs-number">1</span>:]) <span class="hljs-keyword">return</span> root</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li></ul>
用两个栈实现队列
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> stack1 = [] stack2 = [] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">push</span><span class="hljs-params">(self, node)</span>:</span> <span class="hljs-comment"># write code here</span> self.stack1.append(node) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">pop</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># return xx</span> <span class="hljs-keyword">if</span> len(self.stack2) != <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> self.stack2.pop() <span class="hljs-keyword">elif</span> len(self.stack1) != <span class="hljs-number">0</span>: <span class="hljs-keyword">while</span> len(self.stack1): self.stack2.append(self.stack1.pop()) <span class="hljs-keyword">return</span> self.stack2.pop() </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul>
旋转数组的最小数字
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">minNumberInRotateArray</span><span class="hljs-params">(self, rotateArray)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">if</span> len(rotateArray) == <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">0</span> <span class="hljs-keyword">else</span>: <span class="hljs-keyword">return</span> min(rotateArray) </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">minNumberInRotateArray</span><span class="hljs-params">(self, rotateArray)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">if</span> len(rotateArray) == <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">0</span> <span class="hljs-string">''' if len(rotateArray) == 1: return rotateArray[0]; '''</span> index1 = <span class="hljs-number">0</span> index2 = len(rotateArray)-<span class="hljs-number">1</span> indexMid = index1 <span class="hljs-keyword">while</span> rotateArray[index1] >= rotateArray[index2]: <span class="hljs-keyword">if</span> index2-index1 == <span class="hljs-number">1</span>: indexMid = index2 <span class="hljs-keyword">break</span> indexMid = (index1+index2)//<span class="hljs-number">2</span> <span class="hljs-keyword">if</span> rotateArray[indexMid] >= rotateArray[index1]: index1 = indexMid <span class="hljs-keyword">elif</span> rotateArray[indexMid] <= rotateArray[index2]: index2 = indexMid <span class="hljs-keyword">return</span> rotateArray[indexMid] </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul>
斐波那契数列
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">Fibonacci</span><span class="hljs-params">(self, n)</span>:</span> <span class="hljs-comment"># write code here</span> N2 = <span class="hljs-number">0</span> N1 = <span class="hljs-number">1</span> <span class="hljs-keyword">if</span> n<=<span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">0</span> <span class="hljs-keyword">if</span> n==<span class="hljs-number">1</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">1</span> <span class="hljs-keyword">while</span> n><span class="hljs-number">1</span>: N1 = N1+N2 N2 = N1-N2 n = n-<span class="hljs-number">1</span> <span class="hljs-keyword">return</span> N1</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul>
跳台阶
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">jumpFloor</span><span class="hljs-params">(self, number)</span>:</span> <span class="hljs-comment"># write code here</span> N1 = <span class="hljs-number">2</span> N2 = <span class="hljs-number">1</span> <span class="hljs-keyword">if</span> number==<span class="hljs-number">1</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">1</span> <span class="hljs-keyword">if</span> number==<span class="hljs-number">2</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">2</span> <span class="hljs-keyword">while</span> number><span class="hljs-number">2</span>: N1 = N1+N2 N2 = N1-N2 number = number-<span class="hljs-number">1</span> <span class="hljs-keyword">return</span> N1</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>
变态跳台阶
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">jumpFloorII</span><span class="hljs-params">(self, number)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-comment"># 规律:f(n) = 2^(n-1)</span> <span class="hljs-keyword">return</span> <span class="hljs-number">2</span>**(number-<span class="hljs-number">1</span>) </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li></ul>
矩形覆盖
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">rectCover</span><span class="hljs-params">(self, number)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-comment"># 菲波那切数列</span> N1 = <span class="hljs-number">2</span> N2 = <span class="hljs-number">1</span> <span class="hljs-keyword">if</span> number <= <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> <span class="hljs-number">0</span> <span class="hljs-keyword">if</span> number == <span class="hljs-number">1</span>: <span class="hljs-keyword">return</span> N2 <span class="hljs-keyword">if</span> number == <span class="hljs-number">2</span>: <span class="hljs-keyword">return</span> N1 <span class="hljs-keyword">while</span> number > <span class="hljs-number">2</span>: N1 = N1+N2 N2 = N1-N2 number -=<span class="hljs-number">1</span> <span class="hljs-keyword">return</span> N1</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li></ul>
二进制中1的个数
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">NumberOf1</span><span class="hljs-params">(self, n)</span>:</span> <span class="hljs-comment"># write code here</span> flag = <span class="hljs-number">1</span> print(type(flag)) count = <span class="hljs-number">0</span> <span class="hljs-comment"># int 4字节,4x8=32位</span> <span class="hljs-comment"># python能表示任意大的数字,所以手动限定</span> maxBit = <span class="hljs-number">32</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(maxBit): <span class="hljs-keyword">if</span> n & flag: count += <span class="hljs-number">1</span> flag = flag << <span class="hljs-number">1</span> <span class="hljs-keyword">return</span> count</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li></ul>
数值的整数次方
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">Power</span><span class="hljs-params">(self, base, exponent)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">return</span> base ** exponent</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">Power</span><span class="hljs-params">(self, base, exponent)</span>:</span> <span class="hljs-comment"># write code here</span> result = <span class="hljs-number">1.0</span> <span class="hljs-keyword">if</span> exponent >= <span class="hljs-number">0</span>: <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(exponent): result *= base <span class="hljs-keyword">else</span>: <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(abs(exponent)): result *= base result = <span class="hljs-number">1.0</span>/result <span class="hljs-keyword">return</span> result</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li></ul>
调整数组顺序使奇数位于偶数前面
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">reOrderArray</span><span class="hljs-params">(self, array)</span>:</span> <span class="hljs-comment"># write code here</span> oddL = [item <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> array <span class="hljs-keyword">if</span> item % <span class="hljs-number">2</span>] evenL = [item <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> array <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> (item % <span class="hljs-number">2</span>)] result = oddL + evenL <span class="hljs-keyword">return</span> result</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul>
- 第二种方法:
<code class="hljs python has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">reOrderArray</span><span class="hljs-params">(self, array)</span>:</span> <span class="hljs-comment"># write code here</span> oddL = filter(<span class="hljs-keyword">lambda</span> x: x%<span class="hljs-number">2</span>, array) evenL = filter(<span class="hljs-keyword">lambda</span> x:<span class="hljs-keyword">not</span> (x%<span class="hljs-number">2</span>), array) result = oddL + evenL <span class="hljs-keyword">return</span> result</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul>
链表中倒数第k个结点
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class ListNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.next = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">FindKthToTail</span><span class="hljs-params">(self, head, k)</span>:</span> <span class="hljs-comment"># 检查输入:空表</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> head: <span class="hljs-keyword">return</span> head <span class="hljs-comment"># 检查输入:k<=0</span> <span class="hljs-keyword">if</span> k <= <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> ListNode(<span class="hljs-number">0</span>).next pNode = head p1 = head p2 = head <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(k-<span class="hljs-number">1</span>): <span class="hljs-comment"># 检查k大于链表长度的情况</span> <span class="hljs-keyword">if</span> p1.next: p1 = p1.next <span class="hljs-keyword">else</span>: <span class="hljs-keyword">return</span> p1.next <span class="hljs-keyword">while</span> p1.next : p1 = p1.next p2 = p2.next <span class="hljs-keyword">return</span> p2</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class ListNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.next = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">FindKthToTail</span><span class="hljs-params">(self, head, k)</span>:</span> <span class="hljs-comment"># 检查输入:空表</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> head: <span class="hljs-keyword">return</span> head <span class="hljs-comment"># 检查输入:k<=0</span> <span class="hljs-keyword">if</span> k <= <span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> ListNode(<span class="hljs-number">0</span>).next <span class="hljs-comment"># 栈</span> stack1 = [] pNode = head stack1.append(pNode) <span class="hljs-keyword">while</span> pNode.next: pNode = pNode.next stack1.append(pNode) <span class="hljs-keyword">if</span> k <= len(stack1): <span class="hljs-keyword">return</span> stack1[-k] <span class="hljs-keyword">else</span>: <span class="hljs-keyword">return</span> ListNode(<span class="hljs-number">0</span>).next</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li></ul>
反转链表
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class ListNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.next = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># 返回ListNode</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">ReverseList</span><span class="hljs-params">(self, pHead)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-comment"># 检查输入:空链表</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pHead: <span class="hljs-keyword">return</span> pHead pNode = pHead <span class="hljs-keyword">while</span> pNode: pAfter = pNode.next <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pAfter: pReversedHead = pNode <span class="hljs-keyword">if</span> pNode == pHead: pNode.next = <span class="hljs-keyword">None</span> <span class="hljs-keyword">else</span>: pNode.next = pBefore pBefore = pNode pNode = pAfter <span class="hljs-keyword">return</span> pReversedHead</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul>
合并两个排序的链表
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class ListNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.next = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># 返回合并后列表</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">Merge</span><span class="hljs-params">(self, pHead1, pHead2)</span>:</span> <span class="hljs-comment"># 检查输入:空链表</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pHead1: <span class="hljs-keyword">return</span> pHead2 <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pHead2: <span class="hljs-keyword">return</span> pHead1 <span class="hljs-comment"># 确定pHead</span> pNode1 = pHead1 pNode2 = pHead2 <span class="hljs-keyword">if</span> pNode1.val <= pNode2.val: pNode = pNode1 pNode1 = pNode1.next <span class="hljs-keyword">else</span>: pNode = pNode2 pNode2 = pNode2.next pHead = pNode <span class="hljs-keyword">while</span> pNode1 <span class="hljs-keyword">or</span> pNode2: <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pNode1: pNode.next = pNode2 pNode2 = pNode2.next <span class="hljs-keyword">elif</span> <span class="hljs-keyword">not</span> pNode2: pNode.next = pNode1 pNode1 = pNode1.next <span class="hljs-keyword">else</span>: <span class="hljs-keyword">if</span> pNode1.val <= pNode2.val: pNode.next = pNode1 pNode1 = pNode1.next <span class="hljs-keyword">else</span>: pNode.next = pNode2 pNode2 = pNode2.next pNode = pNode.next <span class="hljs-keyword">return</span> pHead</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li></ul>
树的子结构
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class TreeNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.left = None</span> <span class="hljs-comment"># self.right = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">DoesTree1HaveTree2</span><span class="hljs-params">(self, pRoot1, pRoot2)</span>:</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pRoot2: <span class="hljs-keyword">return</span> <span class="hljs-keyword">True</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pRoot1: <span class="hljs-keyword">return</span> <span class="hljs-keyword">False</span> <span class="hljs-keyword">if</span> pRoot1.val != pRoot2.val: <span class="hljs-keyword">return</span> <span class="hljs-keyword">False</span> <span class="hljs-keyword">return</span> self.DoesTree1HaveTree2(pRoot1.left, pRoot2.left) <span class="hljs-keyword">and</span> self.DoesTree1HaveTree2(pRoot1.right, pRoot2.right) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">HasSubtree</span><span class="hljs-params">(self, pRoot1, pRoot2)</span>:</span> <span class="hljs-comment"># write code here</span> result = <span class="hljs-keyword">False</span> <span class="hljs-keyword">if</span> pRoot1 <span class="hljs-keyword">and</span> pRoot2: <span class="hljs-keyword">if</span> pRoot1.val == pRoot2.val: result = self.DoesTree1HaveTree2(pRoot1, pRoot2) <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> result: result = self.HasSubtree(pRoot1.left, pRoot2) <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> result: result = self.HasSubtree(pRoot1.right, pRoot2) <span class="hljs-keyword">return</span> result</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li></ul>
包含min函数的栈
- 第一种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self)</span>:</span> self.data = [] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">push</span><span class="hljs-params">(self, node)</span>:</span> <span class="hljs-comment"># write code here</span> self.data.append(node) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">pop</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">return</span> self.data.pop() <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">top</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">return</span> self.data[-<span class="hljs-number">1</span>] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">min</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">return</span> min(self.data)</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># 借助于辅助栈,操作的时间复杂度都为O(1)</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self)</span>:</span> self.stackData = [] self.stackMin = [] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">push</span><span class="hljs-params">(self, node)</span>:</span> <span class="hljs-comment"># write code here</span> self.stackData.append(node) <span class="hljs-keyword">if</span> (len(self.stackMin)==<span class="hljs-number">0</span>) <span class="hljs-keyword">or</span> (node<self.stackMin[-<span class="hljs-number">1</span>]): self.stackMin.append(node) <span class="hljs-keyword">else</span>: self.stackMin.append(self.stackMin[-<span class="hljs-number">1</span>]) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">pop</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">if</span> len(self.stackData) <= <span class="hljs-number">0</span>: <span class="hljs-keyword">print</span> <span class="hljs-string">"Stack is empty, can't pop."</span> <span class="hljs-keyword">return</span> self.stackMin.pop() <span class="hljs-keyword">return</span> self.stackData.pop() <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">top</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">return</span> self.stackData[-<span class="hljs-number">1</span>] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">min</span><span class="hljs-params">(self)</span>:</span> <span class="hljs-comment"># write code here</span> <span class="hljs-keyword">if</span> len(self.stackMin) <= <span class="hljs-number">0</span>: <span class="hljs-keyword">print</span> <span class="hljs-string">"Stack is empty, can't pop."</span> <span class="hljs-keyword">return</span> <span class="hljs-keyword">return</span> self.stackMin[-<span class="hljs-number">1</span>]</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li></ul>
栈的压入、弹出序列
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self)</span>:</span> self.stackT =[] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">IsPopOrder</span><span class="hljs-params">(self, pushV, popV)</span>:</span> <span class="hljs-comment"># write code here</span> flag = <span class="hljs-keyword">False</span> pushV.reverse() popV.reverse() <span class="hljs-keyword">while</span> len(pushV)><span class="hljs-number">0</span>: self.stackT.append(pushV.pop()) <span class="hljs-keyword">while</span> (len(self.stackT)><span class="hljs-number">0</span>) <span class="hljs-keyword">and</span> (len(popV)><span class="hljs-number">0</span>) <span class="hljs-keyword">and</span> (self.stackT[-<span class="hljs-number">1</span>] == popV[-<span class="hljs-number">1</span>]): self.stackT.pop() popV.pop() <span class="hljs-keyword">if</span> len(self.stackT) == <span class="hljs-number">0</span>: flag = <span class="hljs-keyword">True</span> <span class="hljs-keyword">return</span> flag </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul>
从上往下打印二叉树
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-comment"># class TreeNode:</span> <span class="hljs-comment"># def __init__(self, x):</span> <span class="hljs-comment"># self.val = x</span> <span class="hljs-comment"># self.left = None</span> <span class="hljs-comment"># self.right = None</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-comment"># 返回从上到下每个节点值列表,例:[1,2,3]</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self)</span>:</span> self.queue = [] <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">PrintFromTopToBottom</span><span class="hljs-params">(self, root)</span>:</span> <span class="hljs-comment"># write code here</span> result = [] <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> root: <span class="hljs-keyword">return</span> [] self.queue.append(root) <span class="hljs-keyword">while</span> len(self.queue) > <span class="hljs-number">0</span>: <span class="hljs-comment">#print self.queue[0]</span> tmpNode = self.queue[<span class="hljs-number">0</span>] result.append(tmpNode.val) <span class="hljs-keyword">if</span> tmpNode.left: self.queue.append(tmpNode.left) <span class="hljs-keyword">if</span> tmpNode.right: self.queue.append(tmpNode.right) self.queue.remove(self.queue[<span class="hljs-number">0</span>]) <span class="hljs-keyword">return</span> result</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li></ul>
二叉搜索树的后序遍历序列
<code class="language-python hljs has-numbering"><span class="hljs-comment"># -*- coding:utf-8 -*-</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">VerifySquenceOfBST</span><span class="hljs-params">(self, sequence)</span>:</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> sequence: <span class="hljs-keyword">return</span> <span class="hljs-keyword">False</span> length = len(sequence) <span class="hljs-keyword">if</span> length<=<span class="hljs-number">0</span>: <span class="hljs-keyword">return</span> <span class="hljs-keyword">False</span> rootValue = sequence[length-<span class="hljs-number">1</span>] i = <span class="hljs-number">0</span> <span class="hljs-keyword">for</span> ii <span class="hljs-keyword">in</span> range(length-<span class="hljs-number">1</span>): <span class="hljs-keyword">if</span> sequence[i] > rootValue: <span class="hljs-keyword">break</span> i = i+<span class="hljs-number">1</span> <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> range(i, length-<span class="hljs-number">1</span>): <span class="hljs-keyword">if</span> sequence[j] < rootValue: <span class="hljs-keyword">return</span> <span class="hljs-keyword">False</span> leftFlag = <span class="hljs-keyword">True</span> <span class="hljs-keyword">if</span> i > <span class="hljs-number">0</span>: leftFlag = self.VerifySquenceOfBST(sequence[:i]) rightFlag = <span class="hljs-keyword">True</span> <span class="hljs-keyword">if</span> i < length-<span class="hljs-number">1</span>: rightFlag = self.VerifySquenceOfBST(sequence[i:length-<span class="hljs-number">1</span>]) <span class="hljs-keyword">return</span> leftFlag <span class="hljs-keyword">and</span> rightFlag</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul>
<code class="language-python hljs has-numbering"></code><ul style="" class="pre-numbering"><li>1</li></ul><ul style="" class="pre-numbering"><li>1</li></ul>
- 第一种方法:
<code class="language-python hljs has-numbering"></code><ul style="" class="pre-numbering"><li>1</li></ul><ul style="" class="pre-numbering"><li>1</li></ul>
- 第二种方法:
<code class="language-python hljs has-numbering"></code><ul style="" class="pre-numbering"><li>1</li></ul><ul style="" class="pre-numbering"><li>1</li></ul>
(持续更新中……)