先定个小目标,第一部分,先刷50道
每个题目的前半部分的超链接对应题目链接,后半部分对应解题链接
1、两数和。输入一个全是int数的列表、target(目标和),返回满足条件的下标和。
- 要求:1、时间复杂度应为O(n),因此双循环的方法无效;2、假设只满足条件的值只有一组
- 思路:先排序,再记录下排序后对应原列表的索引位置,再找指针两段往中间遍历
2、Add Two Numbers。 输入:两个链表的头节点,输出:两个链表对应节点相加后的链表的头节点。(注:两个链表可能不一样长,两数和相加大于10时,需要进一位,且当前数只能取个位数上的值)
- 思路:找两个指针遍历两个链表对应值相加,关键是边界及特殊情况的处理,如一个指针游动到末尾,另一个还没有(解决:让没结束的继续走,结束了的就停);两数之和大于等于10情况的处理(sign标记为1,方便下一次进位,并且当前值只能取个位数上的值);循环结束后,sign仍等于1时情况的处理 (需要新创建一个取值为1的节点)
3、Longest Substring Without Repeating Characters。输入一个字符串,输出该字符串中最长的无重复的子串长度
4、Median of Two Sorted Arrays。 输入两个有序的列表,输出两个有序列表的中位数
- 思路:并没有想得那么复杂,使用extend将两个列表合并后再排序,最后取得中位数即可
5、Longest Palindromic Substring 。输入一个字符串,输出该字符串中最长的回文序列(要求是连续的);对比leetcode516:最长回文子序列(这个是只要求长度,且可以不连续)
思路:
- 1、暴力解题,但是这种方法会超时
- 2、没整明白,但是速度很快,参考地址:https://blog.csdn.net/asd136912/article/details/78987624
6、ZigZag Conversion。 输入一个倒Z字形的字符串和行数rows,输出其一行一行遍历时的字符串
思路(参考文章Leetcode6: ZigZag Conversion):
- 首先分为两部分进行处理,第一部分是处理垂直线上的元素,可以发现每一行上垂直线的元素下标索引相差
,以第0行为例,索引0的下一个元素为
,再下一个元素对应
,以此类推(在字符串的长度内);
- 第二部分就是定位斜线上的元素,斜线上的元素索引对应公式为
,其中j为第i行垂直线上的元素索引;
- 最后再单独处理最后一行的元素
7、Reverse Integer。输入一个正或负的整数,输出其颠倒后的整数,如果溢出则返回0(溢出:小于或大于
)
思路:
- 第一种方法:先判断是否有负号,然后将去掉负号的字符串倒序过来([::-1]),再判断是否越界
- 第二种方法:倒序遍历至索引1的位置(在遍历的过程中每次都检验是否越界,越界则直接返回0),最后单独判断索引0位置
8、String to Integer (atoi)。输入一个字符串,输出一个数字(正或负),如果不以正负或数字开头,直接返回0(空格除外)
思路:先对输入字符串进行strip()除去首尾两端的空格,再判断首字符的正负号后,开始遍历该字符串
9、Palindrome Number。输入一个或正或负的整数,判断该数是不是回文数(即反过来的值与正着的值一样,很明显负数不是回文数)
思路:
- 方法一:转换为str,将其反转再与原值进行对比,相等则返回true,否则返回false
- 方法二:先用取余的方法得到每一位上的数的列表,再对列表首尾一一对应判断是否相等,相等返回true,否则false