摘要:
题目:对于两个有序链表,将它们合并成一个有序链表。 这种题目一看就是利用归并排序的思想,实现方式有递归和非递归两种方式。 方法1(非递归): 代码如下: (1)非递归的方式时间复杂度为O(n),空间复杂度为O(1)。 (2)尤其重要的一点是,在做这道题目时,一定要搞清楚最终返回的合并后的链表是一个新 阅读全文
摘要:
今天在刷《剑指offer》时,遇到了几个比较有意思的点,题目是面试题20,我写的代码如下: 这段代码,有两个点需要注意: 1.在函数isDIdit和函数isSignedDigit中,它们的形参实际上是指针的引用,即本质是个引用,不过这个引用是指针变量的引用。原书代码中采用的是二级指针,我嫌麻烦使用了 阅读全文
摘要:
全排列可以用分治的思想去实现,主要操作步骤是将首个元素与剩余其他的所有元素进行交换。主要分为两种:允许生成不重复的序列和不允许生成重复的序列。 1.允许重复的序列,代码如下: 2.不允许重复的序列: 在非重复的情况下,需要判断一下:index之后的元素中是否有存在与之前a[i]重复的元素,如果有重复 阅读全文
摘要:
一.题目链接:https://leetcode.com/problems/evaluate-reverse-polish-notation/ 二.题目大意: 给定后缀表达式,求出该表达式的计算结果。 三.题解: 对于这道题目,首先观察后缀表达式(逆波兰表达式)的特点,那就是运算符在操作数的后面,所以 阅读全文
摘要:
关于求解斐波那契数列,这是一道比较经典的题目,本文主要是对斐波那契数列求解方法的小结。 首先,定义Fibonacci数列如下: 方法1: 利用递归求解,这是最容易写出的算法,代码如下: 该算法的时间复杂度为O(2^N)。为什么呢?因为每一次计算Fibonacci(n)时,都需要计算Fibonacci 阅读全文
摘要:
一.题目链接:https://leetcode.com/problems/longest-common-prefix/ 二.题目大意: 给定若干个字符串,找出它们的最长公共子串。 三.题解: 这道题目应该是一道典型题目,需要着重掌握的。该题目的解法并不是很难,代码最好精简化。本题有两种思路: 1.纵 阅读全文
摘要:
一.题目链接:https://leetcode.com/problems/roman-to-integer/ 二.题目大意: 给定一个罗马数字,返回它的整数形式。 三.题解: 这道题与12题恰好相反,关键之处在于罗马数字的组成规律。首先,弄清楚每个罗马字母对应的数字大小: 实质上,对于一个罗马数字, 阅读全文
摘要:
一.题目链接:https://leetcode.com/problems/integer-to-roman/ 二.题目大意: 给定一个整数,返回它的罗马数字的形式。 三.题解: 要想做出这道题目,首先应该弄清楚罗马数字的规律。罗马数字中的任意一个字符连写不会重复出现4次,最多连续出现3次。题目给定的 阅读全文
摘要:
一.题目链接:https://leetcode.com/problems/container-with-most-water/ 二.题目大意: 给定n个非负整数a1,a2....an;其中每一个整数对应着一条垂直的线段,即(i,ai)到(i,0)这个线段。其中这n个线段中,任意两个线段与x轴就构成了 阅读全文
摘要:
一.题目链接:https://leetcode.com/problems/regular-expression-matching/ 二.题目大意: 实现一个正则表达式,该正则表达式只有两种特殊的字符——“.”和“*”,其中.能表示任意字符,即它可以匹配任意的字符;*表示可以重复前面的字符0次或者多次 阅读全文