为了记录已经做过的leetcode题目,因此简单的记录了代码及解释
做题顺序是先简单后难,先面试热门题目后一般,每组五道题
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
思路:
- 遍历数组中的元素
- 定义num2为 target - nums[i],即另外一个整数
- 判断num2是否在nums中,并输出其索引值
- 判断num2索引值与另外一个元素是否相同,不同则输出两者的索引
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
num2 = target - nums[i]
if num2 in nums:
j = nums.index(num2) #查找num2在nums中的索引
if i != j:
return [i,j]
- 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
思路:
- 判断整数是否是0,0则不反转返回本身
- 将数字转化为字符串
- 判断是否为负,负数则转换为正数
- 对翻转数组使用切片,得到翻转后的数组
- 将字符串转化为数字
- 判断是否符合标准,并输出结果
class Solution:
def reverse(self, x: int) -> int:
"""
:type x: int
:rtype: int
"""
# 判断是否为0,为0则不转换
if x==0:
return 0
# 将数字转换为字符串
str_x=str(x)
x=' '
# 判断是否是负数,负数则将其转换为正数
if str_x[0]=='-':
x += '-'
# 对翻转数组使用切片
x+=str_x[len(str_x)-1::-1].lstrip("0").rstrip("-")#如果有0去掉反转后的首个0和去掉尾部的负号
# 将字符串转换为int型
x=int(x)
# 判断是否符合标准
if -2**31<x<2**31-1:
return x
return 0
- 罗马数字转整数
思路:
- 创建罗马数字对应的字典
- 遍历字符串中的前n-1元素
- 判断某个元素与右边的值的大小,左大右小则加,左小右大则减
- 对于最后一位元素或者只包括一位元素的字符串直接相加
class Solution:
def romanToInt(self, s: str) -> int:
result = 0
temp_dict = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
for i in range(len(s)-1):
# 取出前面位置元素并判断左右大小,左大右小则加,左小右大则减
if temp_dict[s[i]]<temp_dict[s[i+1]]:
result -= temp_dict[s[i]]
else:
result += temp_dict[s[i]]
# 最后一位元素直接相加
result += temp_dict[s[-1]]
return result
- 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”
思路:
只要比较了最大和最小字符串之间的公共前缀,就是整个列表中所有字符串的公共前缀
- 首先判断列表是否为空
- 找到列表中的最大和最小字符串,比较的是字符串之间的ASII码值
- 取出最小的字符串的值及对应索引值
- 判断某个字母是否与最长字符串中的字母一致,并输出不一致的字母之前的所有字母
- 列表中只有一个元素的时候,直接输出最小字符串
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
s1 = min(strs) # flight
s2 = max(strs) # flower
for i , x in enumerate(s1):
if x != s2[i]:
return s2[:i]
# 输入字符串为[''],即只有一个字符串
return s1
- 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合
- 左括号必须以正确的顺序闭合
思路:(借鉴)
- 设置一个列表,把该列表当做栈来使用即可
- 使用字典存储括号,并且右括号为key,左括号为value
- 遍历字符串,左括号则添加到starck列表
- 右括号则进行两个判断,列表是否为空,此字符串对应的value值是否是相对应的
- 其他情况则为False
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
dic={')':'(','}':'{',']':'['}
for char in s:
if char in dic.values(): #左括号就入栈
stack.append(char)
elif char in dic.keys(): #有右括号的话就进行比较,
if stack==[] or dic[char] != stack.pop():
return False
else:
return False #不在字典中的输入直接输出错误
return stack==[]