返回
Featured image of post LeetCode每日一题周总结(十)

LeetCode每日一题周总结(十)

Find the Town Judge

略。

Complement of Base 10 Integer

Number Complement类似。

Palindrome Partitioning

Palindrome Partitioning题目大意:已知一个字符串,求把这个字符串分解成回文字符串的所有方案。

使用深度优先搜索和回溯遍历字符串的所有子串,维护当前遍历的子串和字符串的回文分解方案,只有当子串是回文字符串时才能添加到分解方案,如果遍历到字符串末尾时恰好所有子串都是回文字符串,就把当前分解方案加入答案中。每次把子串添加到分解方案都要进行回溯,即从分解方案中弹出当前子串。

Car Pooling

Car Pooling题目大意:已知一辆汽车的准乘人数和一个数组tripstrips的每一项包含三个值:numPassengersfromto,表示有numPassengers个乘客在from上车并在to下车。求汽车能否在不超载的情况下把所有乘客送到目的地。

这是一道模拟题,初始汽车乘客数为0,numPassengers个乘客在from上车并在to下车可以分解为在from乘客数增加numPassengers和在to乘客数减少numPassengers两个事件。遍历trips得到所有事件,按照事件发生的位置从小到大排序,依次计算在每个位置汽车是否超载即可。

Linked List Random Node

Linked List Random Node题目大意:编写一个函数随机获取链表中的一个结点。

题目不难,可以先计算链表长度,在长度范围内生成一个随机数,返回这个序号的结点就可以了。

我更加好奇的是LeetCode是怎么判断这道题的对错的。

Cherry Pickup II

Cherry Pickup II题目大意:如图的矩形表示草莓田,格子中的数字表示草莓数量,有两个机器人分别从矩形的左上角和右上角出发采摘草莓,它们遵循以下原则行动:

  • 机器人从第i行第j列可以移动到第i+1行第j-1列、第i+1行第j列或第i+1行第j+1列。
  • 机器人经过一个格子时会采摘全部草莓,这个格子变为空。
  • 两个机器人到达同一个格子时,只有一个机器人可以采摘到草莓。
  • 机器人不能走出矩形边界。
  • 机器人应当抵达矩形的底部。

求机器人最多能够采摘多少草莓。

Cherry Pickup II
Cherry Pickup II

使用动态规划,根据题意两个机器人总是在同一行,所以用dp[r][c1][c2]表示第一个机器人从第r行第c1列出发,第二个机器人从第r行第c2列出发最多能采摘多少草莓。状态转移公式为: $$ \begin{aligned} dp[r][c1][c2]&=机器人在当前位置能够采摘的草莓数 \newline &+max(dp[r+1][c1-1][c2-1],\dots,dp[r+1][c1+1][c2+1]) \end{aligned} $$

Robot Bounded In Circle

Robot Bounded In Circle题目大意:在无穷大的平面上,上北下南左西右东,机器人站在原点并且面朝北方,它能够接收三种指令:

  • ‘G’:机器人将向前移动一个单位。
  • ‘L’:机器人将向左旋转90度。
  • ‘R’:机器人将向右旋转90度。

已知一个指令序列,判断机器人能否在执行若干次该指令序列后回到原点。

这道题是一道模拟题,机器人只有在一种情况下无法回到原点,即机器人执行完该指令序列后离开原点并且仍然面朝北方。其他任意情况执行4次指令序列后机器人都能回到原点。因此只需要对机器人执行完一遍指令序列后的位置和朝向进行判断。

Licensed under CC BY-NC-SA 4.0