leetcode刷题(一)(现有9/50,正在更新)

先定个小目标,第一部分,先刷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):

  • 首先分为两部分进行处理,第一部分是处理垂直线上的元素,可以发现每一行上垂直线的元素下标索引相差2 \times rows -2=step,以第0行为例,索引0的下一个元素为0+step,再下一个元素对应0+step+step,以此类推(在字符串的长度内);
  • 第二部分就是定位斜线上的元素,斜线上的元素索引对应公式为j + (step-2*i),其中j为第i行垂直线上的元素索引;
  • 最后再单独处理最后一行的元素rst += s[rows-1::step]

7、Reverse Integer输入一个正或负的整数,输出其颠倒后的整数,如果溢出则返回0(溢出:小于-2^{31}或大于2^{31}-1

思路:

  • 第一种方法:先判断是否有负号,然后将去掉负号的字符串倒序过来([::-1]),再判断是否越界
  • 第二种方法:倒序遍历至索引1的位置(在遍历的过程中每次都检验是否越界,越界则直接返回0),最后单独判断索引0位置

8、String to Integer (atoi)输入一个字符串,输出一个数字(正或负),如果不以正负或数字开头,直接返回0(空格除外)

思路:先对输入字符串进行strip()除去首尾两端的空格,再判断首字符的正负号后,开始遍历该字符串

9、Palindrome Number输入一个或正或负的整数,判断该数是不是回文数(即反过来的值与正着的值一样,很明显负数不是回文数)

思路:

  • 方法一:转换为str,将其反转再与原值进行对比,相等则返回true,否则返回false
  • 方法二:先用取余的方法得到每一位上的数的列表,再对列表首尾一一对应判断是否相等,相等返回true,否则false

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值