【LeetCode】LeetCode刷题--简单题(1)

为了记录已经做过的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]
  1. 整数反转
    给出一个 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
  1. 罗马数字转整数
    在这里插入图片描述

思路

  • 创建罗马数字对应的字典
  • 遍历字符串中的前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
  1. 最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。
    如果不存在公共前缀,返回空字符串 “”

思路
只要比较了最大和最小字符串之间的公共前缀,就是整个列表中所有字符串的公共前缀

  • 首先判断列表是否为空
  • 找到列表中的最大和最小字符串,比较的是字符串之间的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
  1. 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合
  2. 左括号必须以正确的顺序闭合

思路:(借鉴)

  • 设置一个列表,把该列表当做栈来使用即可
  • 使用字典存储括号,并且右括号为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==[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值