Week 07 - Leetcode 61 - 70
61 - 旋转链表

class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head) return head;
int n = 1;
ListNode* tail = head, *cur = head, *res = head;
while(tail->next)
tail = tail->next, n++;
tail->next = head;
k = n - 1 - (k % n);
while(k--)
cur = cur->next;
res = cur->next;
cur->next = nullptr;
return res;
}
};62 - 不同路径

基础的dp,初始化第一行第一列都为1 然后状态转移方程 f[i][j] = f[i - 1][j] + f[i][j - 1]
仅用到上一行 可以用滚动数组优化空间;
实际上答案就是一个组合数问题, 从 (n - 1 + m - 1) 个操作中选出 (n - 1) 个向下;
63 - 不同路径II
在上一题的基础上增加了一些不能走的点, 不能走就设成0,能走和上题一样; 为了避免边界问题, 可以多加一行和一列,值为0;
64 - 最小路径和
同样是动态规划,枚举从起点走到每个点的最小权值;
同样也是多加一行避免边界情况;
65 - 有效数字
这题没什么意义.. 面向测试用例编程罢了 不做也行 (😁
66 - 加一
前面做过一个类似的
67 - 二进制求和
可以说和上面的题基本一样了
68 - 文本左右对齐
这是一道模拟题;

69 - x 的平方根
这里的二分是下取整,相当于找到一个最大的y 使得y * y <= x
用乘法会有溢出问题 -> 转成除法
INT_MAX + 1 会溢出 -> 转成 long long
70 - 爬楼梯
f[i] = f[i - 1] + f[i - 2]; // 斐波那契数列 从走一步or 走两步转移过来
Last updated