Leetcode简单题66、67、69、70、83、88、100

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jesmine_gu/article/details/85013406
66. 加一
class Solution(object):
    def plusOne(self, digits):
        for i in range(len(digits)-1, -1, -1):
            ad = 0
            if digits[i] != 9:
                digits[i] = digits[i] + 1 + ad
                break
            elif digits[i] == 9 and i != 0:
                digits[i] = 0
                ad = 1
            else:
                digits[i] = 0
                digits.insert(0, 1)
        return digits
67. 二进制求和

思想:二进制转十进制再转二进制

class Solution(object):
    def addBinary(self, a, b):
        a = int(a, 2)
        b = int(b, 2)
        return bin(a+b)[2:]
69. x 的平方根
class Solution(object):
    def mySqrt(self, x):
        if x:
            x = x ** 0.5
        return int(x)
70. 爬楼梯

思想:斐波那契数列(Fibonacci sequence)利用递归会出现超出时间限制的错误

class Solution:
    def climbStairs(self, n):
        if n == 0 or n == 1 or n == 2:
            return n
        else:
            n1 = 1
            n2 = 2
            for i in range(3, n+1):
                n3 = n1+n2
                n1 = n2
                n2 = n3
            return n2
83. 删除排序链表中的重复元素
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    def deleteDuplicates(self, head):
        if head == None or head.next == None:
            return head
        p = head
        q = head.next
        while q:
            if p.val == q.val:
                # 判断是不是最后一个元素,有不同的删除后处理
                if q.next:
                    p.next = q.next
                    q = q.next
                else:
                    p.next = None
                    return head
            else:
                p = p.next
                q = q.next
        # q.next = None
        return head

if __name__ == '__main__':
    l = ListNode(1)
    l1 = ListNode(1)
    l2 = ListNode(2)
    l3 = ListNode(2)
    l4 = ListNode(5)
    l5 = ListNode(5)
    l.next = l1
    l1.next = l2
    l2.next = l3
    l3.next = l4
    l4.next = l5
    t = Solution()
    ll = t.deleteDuplicates(l)
    while ll:
        print(ll.val)
        ll = ll.next
88. 合并两个有序数组

思想:两种方法

方法一:直接合并后排序

方法二:常规比较插入

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        for i in range(n):
            nums1[m+i] = nums2[i]
        nums1.sort()
        return nums1

    def merge1(self, nums1, m, nums2, n):
        i = 0
        j = 0
        while i < m and j < n:
            if nums1[i] < nums2[j]:
                i += 1
            else:
                nums1.insert(i, nums2[j])
                j += 1
                i += 1
        while j < n:
            nums1.insert(m+j, nums2[j])
            j += 1
        return nums1
if __name__ == '__main__':
    t = Solution()
    nums1 = [1, 2, 3, 0, 0, 0]
    nums2 = [2, 5, 6]
    print(t.merge(nums1, 3, nums2, 3))
100. 相同的树
class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution(object):
    def isSameTree(self, p, q):
        if p == None and q == None:
            return True
        if p != None and q != None and p.val == q.val:
            return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
        else:
            return False
if __name__ == '__main__':
    p = TreeNode(1)
    p1 = TreeNode(2)
    p2 = TreeNode(3)
    p.left = p1
    p.right = p2
    q = TreeNode(1)
    q1 = TreeNode(2)
    q2 = TreeNode(3)
    q.left = q1
    q.right = q2
    t = Solution()
    print(t.isSameTree(p, q))

猜你喜欢

转载自blog.csdn.net/jesmine_gu/article/details/85013406
今日推荐