• LeetCode学习笔记1


    1.判断是否回文数:

    def isPalindrome(x):
        x=str(x)
        xx=x[::-1]
        return True if xx==x else False
    
    isPalindrome(-121)#False
    isPalindrome(121)#True
    

    2.给定一个无序的整数数组,找到其中最长上升子序列的长度。(动态规划)

    输入: [10,9,2,5,3,7,101,18]
    输出: 4
    解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。

    class Solution:
        def lengthOfLIS(self, nums: List[int]) -> int:
            if nums==[]:
                return 0
            L=len(nums)
            dp=[1 for _ in range(L)]
            for i in range(L):
                for j in range(i):
                    if nums[j]<nums[i]:
                        dp[i]=max(dp[i],dp[j]+1)
            return max(dp)
    

    3.给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度

    class Solution:
        def lengthOfLongestSubstring(self, s: str) -> int:
            start,res,cache=0,0,{}
            for idx,c in enumerate(s):
                if c in cache and cache[c]>=start:
                    start=cache[c]+1
                    cache[c]=idx
                else:
                    cache[c]=idx
                    cur=idx-start+1
                    res=max(res,cur)
            return res
    

    4.给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,

    class Solution:
        def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
            nums3=nums1+nums2
            nums3.sort()
            i=len(nums3)//2
            j=len(nums3)//2-int(len(nums3)%2==0)
            return (nums3[i]+nums3[j])/2
    

    6.将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

    class Solution:
        def convert(self, s: str, numRows: int) -> str:
            cache=[i for i in range(numRows)]+[i for i in range(1,numRows-1)][::-1]
            res=['']*numRows
            for i ,c in enumerate(s):
                res[cache[i%len(cache)]]+=c
            return ''.join(res)
    

      

    7.给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    class Solution:
        def reverse(self, x: int) -> int:
            strx=str(x)
            x=int('-'+strx[1:][::-1]) if x<0 else int(strx[::-1])
            return x if (-2**31)<x<(2**31-1) else 0
    

    8.首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:

    如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
    假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
    该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
    注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。

    在任何情况下,若函数不能进行有效的转换时,请返回 0 。

    提示:

    本题中的空白字符只包括空格字符 ' ' 。
    假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

    class Solution:
        def myAtoi(self, str: str) -> int:
            str=str.lstrip()
            if len(str)==0 or (str[0].isdigit()==False and str[0] not in ['-','+']):
                return 0
            res,i=str[0],1
            while i<len(str) and str[i].isdigit():
                res+=str[i]
                i+=1
            try:
                res=int(res)
                return min(max(res,-2**31),2**31-1)
            except:
                return 0
    

    9.判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    class Solution:
        def isPalindrome(self, x: int) -> bool:
            return x>=0 and int(str(x)[::-1])==x
    class Solution:
        def isPalindrome(self, x: int) -> bool:
            if x<0 :return False
            res,temp=0,x
            while temp:#数字反取
                res=res*10+temp%10
                temp//=10
            return res==x
    

    13. 罗马数字转整数

    class Solution:
        def romanToInt(self, s: str) -> int:
            ref={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M' : 1000}
            if not str:
                return 0
            res=ref[s[0]]#第一数字先确定
            for i in range(1,len(s)):
                prev=s[i-1]
                cur=s[i]
                if ref[prev]<ref[cur]:
                    res+=(ref[cur]-2*ref[prev])#因为prev已经加过一次了,所以减2倍
                else:
                    res+=ref[cur]#加上后面的值
            return res
    

      

    14.查找字符串数组中的最长公共前缀  

    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            if not strs:
                return ''
            res=min(strs,key=len)
            for j in strs:
                for i in range(len(res)):
                    if j[i]!=res[i]:
                        res=res[:i]
                        break
            return res
    

     

    15.给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

    20.给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

    class Solution:
        def isValid(self, s: str) -> bool:
            stack=[]
            cache={'(':')','[':']','{':'}'}
            for c in s:
                if c in cache:
                    stack.append(c)
                    continue
                if len(stack)==0 or cache[stack.pop()] !=c:
                    return False
            return stack==[]
    

      

      

      

     

  • 相关阅读:
    比官方文档更易懂的Vue.js教程!包你学会!
    张腾:腾讯云融合通信应用场景及案例分享
    你大概走了假敏捷:《手绘敏捷宝典》在此,还不来收!
    这个PHP无解深坑,你能解出来吗?(听说能解出来的都很秀)
    从小数学就不及格的我,竟然用极坐标系表白了我的女神!(附代码)
    epoll
    hash_map
    BloomFilter
    Wrapper模式(Decorator模式)
    setvbuf
  • 原文地址:https://www.cnblogs.com/Turing-dz/p/13261350.html
Copyright © 2020-2023  润新知