LeetCode——难度等级Easy的前10道题(题号1~28)

目录

1 两数之和  Two Sum

7 整数反转   Reverse Integer

9 回文数   Palindrome Number

13 罗马数字转整数   Roman to Integer

14 最长公共前缀   Longest Common Prefix

20 有效的括号   Valid Parentheses

21 合并两个有序链表   Merge Two Sorted Lists

26 删除排序数组中的重复选项   Remove Duplicates from Sorted Array

27 移除元素   Remove Element

28 实现strStr()   Implement strStr()


1 两数之和  Two Sum

def twoSum1(nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    d = {}
    for i in range(len(nums)):
        if target - nums[i] in d:
            return [d[target - nums[i]], i]
        d[nums[i]] = i
            


def twoSum2(nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    d = {}
    for i, num in enumerate(nums):
        if target - num in d:
            return [d[target - num], i]
        d[num] = i

7 整数反转   Reverse Integer

def reverse1(x):
    """
    :type x: int
    :rtype: int
    """
    # -214783648 ~ 214783647
    num = 0
    a = abs(x)
    while(a != 0):
        temp = a % 10
        num = num * 10 + temp
        a = int(a/10)  # 使用a//10结果不对
    if x > 0 and num < 0x7fffffff:
        return num
    elif x < 0 and num <= 0x7fffffff:
        return -num
    else:
        return 0


def reverse2(x):
    """
    :type x: int
    :rtype: int
    """
    sign = x < 0 and -1 or 1
    x = abs(x)
    ans = 0
    while(x):
        ans = ans * 10 + x % 10
        x = int(x/10)
    return sign * ans if ans < 0x7fffffff else 0

9 回文数   Palindrome Number

def isPalindrome1(x):
    if x < 0:
        return False
    else:
        s = str(x)
        return s == s[::-1]


def isPalindrome2(x):
    z = x
    y = 0
    while x > 0:
        y = y * 10 + x % 10
        x = int(x/10)
    return z == y

13 罗马数字转整数   Roman to Integer

def romanToInt1(s):
    # 思路:把字符串中符合特殊情况的挑出来
    a = {"IV": 4, "IX": 9, "XL": 40, "XC": 90, "CD": 400, "CM": 900}
    d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    n = 0
    e = []
    for i in range(len(s) - 1):
        c = s[i] + s[i+1]
        if c in a.keys():
            n += a[c]
            e.append(i)
            e.append(i+1)
    for i in range(len(s)):
        if i not in e:
            n += d[s[i]]
    return n


def romanToInt2(s):
    # 思路:找到规律,如果字符串后一个比前一个大则减前一个的值
    d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    ans = 0
    for i in range(len(s) - 1):
        c = s[i]
        cafter = s[i + 1]
        if d[c] < d[cafter]:
            ans -= d[c]
        else:
            ans += d[c]
    ans += d[s[-1]]
    return ans


def romanToInt3(s):
    # 思路: 都加,如果后面大于前面则减去两个前面
    d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    result = 0
    for i in range(len(s)):
        if i > 0 and d[s[i]] > d[s[i-1]]:
            result += d[s[i]] - 2 * d[s[i-1]]
        else:
            result += d[s[i]]
    return result

14 最长公共前缀   Longest Common Prefix

def longestCommonPrefix1(strs):
    result = ''
    if len(strs) == 0:
        return result
    a, minstr = 0, min(strs, key=len)
    for ch in minstr:
        for i in range(1, len(strs)):
            if strs[i][a] != ch:
                return result
        a, result = a + 1, result + ch
    return result


def longestCommonPrefix2(strs):
    if len(strs) == 0:
            return ""
    i = 0
    j = 0
    end = 0
    while j < len(strs) and i < len(strs[j]):
        if j == 0:
            char = strs[j][i]
        else:
            if strs[j][i] != char:
                break
            
        if j == len(strs) - 1:
            i += 1
            j = 0
            end += 1
        else:
            j += 1

    return strs[j][:end]


def longestCommonPrefix3(strs):
    """
    通过zip将每个字符串的字母按顺序放入一个元组中:
    zip("abc", "abd")
    [(a, b), (a, b), (c, d)]
    再把元组变为集合即可消去重复元素,所以当集合长度为1时,说明所有字符串在这个位置的字母相等
    """
    res = ""
    if not strs:
        return ""
    for each in zip(*strs):
        if len(set(each)) == 1:
            res += each[0]
        else:
            return res
    return res


def longestCommonPrefix4(strs):
    if not strs:
        return ""
    
    for i in range(len(strs[0])):
        for string in strs[1:]:
            if i >= len(string) or string[i] != strs[0][i]:
                return strs[0][:i]

    return strs[0]

20 有效的括号   Valid Parentheses

def isValid1(s):
    """
    循环搜索()[]{}并删掉,最后剩余空字符串则为True
    """
    k = ["[]", "{}", "()"]
    while(s != ""):
        n = 0
        for i in range(3):
            a = s.find(k[i])
            if a >= 0:
                s = s[:a] + s[a+2:]
                print(s)
            else:
                n += 1
        if n == 3:
            return False
    return True


def isValid2(s):
    """
    从头开始检索如果遇到()[]{}就先加上再减去,如果最后为空列表则为True
    """
    stack = []
    d = ["()", "[]", "{}"]
    for i in range(len(s)):
        stack.append(s[i])
        if len(stack) >= 2 and stack[-2]+stack[-1] in d:
            stack.pop()
            stack.pop()
    return len(stack) == 0


def isValid3(s):
    stack = []
    lookup = {"(": ")", "{": "}", "[": "]"}
    for parenthese in s:
        if parenthese in lookup:
            stack.append(parenthese)
        elif len(stack) == 0 or lookup[stack.pop()] != parenthese:
            return False

    return len(stack) == 0

21 合并两个有序链表   Merge Two Sorted Lists

def mergeTwoLists(l1, l2):
    """
    :type l1: ListNode
    :type l2: ListNode
    :rtype: ListNode
    """
    head = dummy = ListNode(-1)
    while l1 and l2:
        if l1.val < l2.val:
            head.next = l1
            l1 = l1.next
        else:
            head.next = l2
            l2 = l2.next
        head = head.next
    head.next = l1 or l2
    return dummy.next


def initLink(data):  # 创建新链表
    a = ListNode(data[0])
    p = a
    # 逐个为 data 内的数据创建结点, 建立链表
    for i in data[1:]:
        node = ListNode(i)
        p.next = node
        p = p.next
    p.next = None
    return a


def prtLink(link):  # 打印链表
    a = []
    while link is not None:
        a.append(link.val)
        link = link.next
    print(a)


l1 = initLink([1, 2, 3])
prtLink(l1)
l2 = initLink([1, 3, 4])
prtLink(l2)
l3 = mergeTwoLists(l1, l2)
prtLink(l3)

26 删除排序数组中的重复选项   Remove Duplicates from Sorted Array

def removeDuplicates1(nums):
    s = set(nums)
    nums[:] = []
    for i in range(len(s)):
        nums.append(sorted(list(s))[i])
    return len(nums)


def removeDuplicates2(nums):
    if len(nums) <= 1:
        return len(nums)
    slow = 0
    for i in range(1, len(nums)):
        if nums[i] != nums[slow]:
            slow += 1
            nums[slow] = nums[i]
    return slow + 1


def removeDuplicates3(nums):
    n = 1
    if len(nums) > 0:
        for num in range(1, len(nums)):
            if nums[num] != nums[num-1]:
                nums[n] = nums[num]
                n += 1
    else:
        n = 0
    return n

27 移除元素   Remove Element

def removeElement1(nums, val):
    while(1):
        try:
            nums.remove(val)
        except ValueError:
            break
    return len(nums)


def removeElement2(nums, val):
    i = 0
    while i < len(nums):
        if nums[i] == val:
            del nums[i]
        else:
            i += 1
    return len(nums)

28 实现strStr()   Implement strStr()

def strStr1(haystack, needle):
    return haystack.find(needle)


def strStr2(haystack, needle):
    try:
        n = haystack.index(needle)
    except ValueError:
        n = -1
    return n


def strStr3(haystack, needle):
    for i in range(0, len(haystack) - len(needle) + 1):
        if haystack[i:i+len(needle)] == needle:
            return i
    return -1

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值