leetcode-shopee题库-简单2021-07-01

学习目标:

Shoppee 技术面试题库-简单:
  • 94.二叉树的中序遍历
  • 303.区域和检索
  • 剑指offer 52,两个链表的第一个公共节点(同160)
  • 292.Nim游戏
  • 415.字符串相加
  • 9.回文数
  • 剑指offer27.二叉树的镜像
  • 88.合并两个有序数组
  • 合并排序的数组
  • 278.第一个错误的版本

学习时间:

14:54开始

学习笔记:

94.二叉树的中序遍历
# result = list() 不能用全局变量,因为leetcode在测试完一个用例到下一个的时候,不会再运行这一句
class Solution(object):
    def __init__(self):
        self.result = list() # 类成员变量
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if root is None:
            return []
        node = root
        self.inorderTraversal(node.left)
        self.result.append(node.val)
        self.inorderTraversal(node.right)
        return self.result
class Solution(object):
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        result = list()
        self.inorder(root, result)
        return result
        
    def inorder(self, root, result):
        if root is None:
            return []
        node = root
        self.inorde(node.left, result)
        result.append(node.val)
        self.inorder(node.right, result)
303.区域和检索
class NumArray(object):

    def __init__(self, nums):
        """
        :type nums: List[int]
        """
        if not nums:
            return None
        l = len(nums)
        self.dp = [0 for _ in range(l)]
        self.dp[0] = nums[0]
        for i in range(1, l):
            self.dp[i] = self.dp[i-1] + nums[i]


    def sumRange(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: int
        """
        if left == 0: # 一定要单独考虑,否则下面的left-1会变成dp[-1]错误
            return self.dp[right]
        else:
            return self.dp[right] - self.dp[left-1]

剑指offer 52,两个链表的第一个公共节点(同160)
class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        dic = {}
        temp = headA
        while temp:
            dic[temp] = 1
            temp = temp.next

        temp = headB
        while temp:
            if temp in dic:
                return temp
            temp = temp.next
        
        return None
292.Nim游戏

如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜。而如果就像题目描述那样,堆中恰好有四块石头,你就会失败。因为在这种情况下不管你取走多少石头,总会为你的对手留下几块,使得他可以在游戏中打败你。因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4 的情况。

class Solution(object):
    def canWinNim(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return(n%4!=0) # 取余
415.字符串相加
class Solution(object):
    def addStrings(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        res = ''
        carry, i, j = 0, len(num1)-1, len(num2)-1
        
        while i >= 0 or j >= 0 or carry > 0: # carry>0但ij小于0的情况是算完最后一位(最高位)之后要进位
            if i >= 0:
                carry += ord(num1[i]) - ord('0')
            if j >= 0:
                carry += ord(num2[j]) - ord('0') # ord('s')<==>chr(115)对应
            res += str(carry%10) # %代表取余,个位在第一个位置
            carry = carry // 10 # 取整数部分,向下取整
            i -= 1 # 从后往前算
            j -= 1
        return res[::-1] # 从后往前输出str
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值