Week 07 - Leetcode 61 - 70

61 - 旋转链表

avatar
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 - 不同路径

avatar

基础的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 - 文本左右对齐

这是一道模拟题;

avatar

69 - x 的平方根

这里的二分是下取整,相当于找到一个最大的y 使得y * y <= x

用乘法会有溢出问题 -> 转成除法

INT_MAX + 1 会溢出 -> 转成 long long

70 - 爬楼梯

f[i] = f[i - 1] + f[i - 2]; // 斐波那契数列 从走一步or 走两步转移过来

Last updated