7.5 剑指offer

1.剑指 Offer 14- II. 剪绳子 II

取余操作的性质(a + b) % c = (a % c + b % c) % c.

((a+b) % p + c) % p = (a + (b+c) % p) % p 

2.剑指 Offer 15. 二进制中1的个数

时间复杂度为log(n)的做法位运算,n & (n - 1)是把n的最后一位1变为0,因此可以快速迭代。

3.对于快速幂算法,可以使用移位操作的思想简化。

4.剑指 Offer 17. 打印从1到最大的n位数

大数问题,字符串打印,可以考虑dfs来做。

5.剑指 Offer 19. 正则表达式匹配

经典的动态规划,主串s和模式串p,dp[i][j]表示s的前i个元素和p的前j个元素匹配是否成功,对于p,若第j个元素是字母或小数点,与s的第i个元素匹配成功则dp[i][j] = dp[i - 1][j - 1],否则为false。

若第j个元素p[j - 1]为'*',则看前一个元素,若p[j - 2]和主串s[i - 1]可以匹配,则可以忽略掉s[i - 1]继续匹配,即dp[i][j] = dp[i - 1][j]!!!!!

若不可以匹配则dp[i][j] = dp[i][j - 2],把该元素丢掉。

值得注意的是对于dp数组的边界选取,初始时dp[0][0] = true,之后初始化i = 0,j = 1默认了左边界为false。

6.剑指 Offer 25. 合并两个排序的链表

很简单,不过值得注意的是在链表题中可以手动建立一个空头结点简化运算。

7.剑指 Offer 26. 树的子结构

在做递归题目时,需要对递归定义明确,这道题不难,不过树的子结构和相同根节点的子结构是两个问题,需要明确才能递归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值