剑指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)

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