劍指offer 解題思路簡述總結篇11-20

  • 面試題11:旋轉數組的最小數字

方法:設兩個指針,分別位於數組的開頭和結尾,若開頭的數小於結尾的數,直接返回開頭數,否則找到中間的數,若中間數大於開頭數,範圍縮小到中間數到結尾數,若中間數小於開頭數,則範圍縮小到前半部分,若相等則直接return該段的最小值,如此反覆,直到兩個指針指向兩個相鄰的元素,循環結束,返回第二個指針指向的元素。

  • 面試題12:矩陣中的路徑

方法:回朔法,

  • 面試題13:機器人的運動範圍

方法:回朔法

  • 面試題14:剪繩子

方法一:從下往上遞歸,先得到f(2),f(3),再得到f(4),f(5),再f(n)

方法二:貪婪算法,儘可能多的剪出長度爲3的繩子,當剩下事4的時候,剪成2*2的繩子

  • 面試題15:二進制中1的個數

方法一:與運算,先用1與上給定的數字,然後1左移,問題是需要而且確定要移幾次

方法二:把一個數減去1,再與原整數做與運算,會把該整數最右邊的1變成0,所以統計可以做多少次這樣的運算

相關題目:

  • 面試題16:數值的整數次方

方法:很簡單需要注意細節,指數是負數的時候先取證再倒數,爲0的情況單獨考慮

  • 面試17:打印從1到最大的n位數

方法:大數問題,需要用字符串表示數字,相當於n個空位將0到9全排列

  • 面試題18:刪除鏈表的節點

方法一:找到要刪除節點的前節點,指向要刪節點的下個節點,n

方法二:將要刪節點的下個節點的內容複製到要刪節點的位置,將要刪節點的指針指向下下個節點

都要考慮要刪除的節點是尾節點以及頭節點的情況

  • 面試題19:正則表達式匹配

方法:情況過於複雜,分情況討論,用到了遞歸

  • 面試題20:表示數值的字符串

方法: return re.match(r"^[\+|\-]?[0-9]*(\.[0-9]*)?([e|E][\+\-]?[0-9]+)?$",s)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章