• 说明
  • 题目
    • 二维数组中的查找
    • 替换空格
    • 从头到尾打印链表
    • 重建二叉树
    • 用两个栈实现队列
    • 旋转数组的最小数字
    • 斐波那契数列
    • 跳台阶
    • 变态跳台阶
    • 矩形覆盖
    • 二进制中1的个数
    • 数值的整数次方
    • 调整数组顺序使奇数位于偶数前面
    • 链表中倒数第k个结点
    • 反转链表
    • 合并两个排序的链表
    • 树的子结构
    • 包含min函数的栈
    • 栈的压入弹出序列
    • 从上往下打印二叉树
    • 二叉搜索树的后序遍历序列

说明

  • 《剑指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> foundnRow = 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.nextL.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> rootrootTinIndex = <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 = ipreStart = <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+N2N2 = N1-N2n = 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+N2N2 = N1-N2number = 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+N2N2 = N1-N2number -=<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 *= baseresult = <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>).nextpNode = headp1 = headp2 = 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.nextp2 = 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 = headstack1.append(pNode)<span class="hljs-keyword">while</span> pNode.next:pNode = pNode.nextstack1.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> pHeadpNode = 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 = pBeforepBefore = pNodepNode = 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 = pHead1pNode2 = pHead2<span class="hljs-keyword">if</span> pNode1.val <= pNode2.val:pNode = pNode1pNode1 = pNode1.next<span class="hljs-keyword">else</span>:pNode = pNode2pNode2 = pNode2.nextpHead = 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 = pNode2pNode2 = pNode2.next<span class="hljs-keyword">elif</span> <span class="hljs-keyword">not</span> pNode2:pNode.next = pNode1pNode1 = pNode1.next<span class="hljs-keyword">else</span>:<span class="hljs-keyword">if</span> pNode1.val <= pNode2.val:pNode.next = pNode1pNode1 = pNode1.next<span class="hljs-keyword">else</span>:pNode.next = pNode2pNode2 = pNode2.nextpNode = 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>

(持续更新中……)

剑指Offer——Python答案相关推荐

  1. 剑指Offer(Python多种思路实现):树的子结构

    剑指Offer(Python多种思路实现):树的子结构 面试26题: 题目:树的子结构 题:输入两棵二叉树A和B,判断B是不是A的子结构. 解题思路一:递归,注意空指针的情况. class Solut ...

  2. 牛客网剑指offer(Python版)

    剑指offer官网:  https://www.nowcoder.com/ta/coding-interviews 写在前面的话 刷剑指offer的时候只需要提交函数核心部分,但是在公司实际笔试时却需 ...

  3. 剑指offer python实现_剑指offer系列python实现 日更(三)

    今天来讲讲斐波那契数列和它的孩子们~先讲个冷笑话:今天来一盘斐波那契炒饭,它等于昨天的炒饭加上前天的炒饭 ‍ 7.斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第 ...

  4. 剑指offer——python【第54题】字符流中第一个不重复的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  5. python36块砖36人搬算法_剑指offer python实现 66道算法题

    所有题目均采用牛客网在线编程实现,代码均在github上. 数组 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组 ...

  6. 剑指offer python实现_剑指Offer第2题详解(附Python、Java代码实现)

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 这个题较为 ...

  7. 剑指offer python版 找出数组中重复的数字

    def aa(nums):if not nums:return Falsehashes={}ret=[]for s in nums:hashes[s]=hashes[s]+1 if hashes.ge ...

  8. 剑指Offer——Java答案

    第二章 面试需要的基础知识 数组 - 二维数组中查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...

  9. 《剑指offer》答案整理

    第一题,二维数组中的查找:https://blog.csdn.net/a745233700/article/details/82108738 第二题,替换空格:https://blog.csdn.ne ...

  10. 剑指offer python 博客园_python-剑指offer16-20

    16.树 操作给定的二叉树,将其变换为源二叉树的镜像. #class TreeNode:#def __init__(self, x):#self.val = x#self.left = None#se ...

最新文章

  1. linux之sed命令n,N,d,D,p,P,h,H,g,G,x解析
  2. SPOJ 1811. POJ 2774 . 最大公共子串
  3. 推荐系统炼丹笔记:阿里边缘计算+奉送20个推荐系统强特
  4. Sql Group by 使用
  5. 微信小程序反编译解包教程
  6. Effective Modern C++ 完全解读笔记汇总
  7. android 六边形布局,自定义Android六边形进度条(附源码)
  8. 中医文化之熏蒸的历史
  9. Kindle 推送教程:教你用电子邮箱推送电子书(Kindle伴侣)
  10. Java 中的内存映射(Mmap)
  11. 纪中DAY15做题小结
  12. 2014年双11抢货宝典-双11促销商品价格对比清单---妈妈再也不用担心我成为剁手党啦
  13. python修改pdf文件名称_使用Python重命名pdf文件目录几乎可以工作
  14. Plist文件、NSBundle
  15. cortana android 地图,Here地图停止Windows系统 微软:我自己干
  16. 计算机里没有摄像这个程序,我的电脑里咋没摄像头图标?
  17. python下载加密视频_Python下载未加密的m3u8文件(流媒体文件)
  18. 喜报|云南永兴元科技顺利通过CMMI三级认证
  19. Python-函数的初始
  20. 网站上线前的准备工作

热门文章

  1. Tomcat 系统架构与设计模式之设计模式篇
  2. 使scp不用输入密码
  3. linux配置yum源、mount及yum命令
  4. 下载安装tomcat和jdk,配置运行环境,与Intellij idea 2017关联
  5. 初识设计模式之--简单工厂
  6. cmd 下通过NTML代理访问Maven 库
  7. 关于EL表达式中requestScope和param区别
  8. 通过CSS3 Media Query实现响应式Web设计
  9. net helpmsg get error message for error id in cmd script
  10. Java架构师成长之道之Java数据存储