第一次写博客以及今晚刷题的一些心得

第一次写博客以及今晚刷题的一些心得


2020.8.8
今天是我第一次写博客啊,是一个值得纪念的日子。其实很早就有想法想要开始写博客了,但是拖延了这么久的原因,最主要的还是自己太懒了…
不过既然有了个开头,就好好的坚持下去吧,就分享一些每天学习到的新知识以及每天刷题后的想法与心得。

写一下今晚在LeetCode刷的几道题的想法吧,如果没做出来就是贴一下别人大神的好的解题思路。

1.剑指 Offer 43. 1~n整数中1出现的次数
题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof

这道题归到了中等题,想了一段时间,但是没啥思路。参考了一下题解里面一位大神的想法。

每次取后最后两位数,n = num/100;
如果n>25,则这两位数无法翻译成一个字母,然后往前递归移动一位translateNum(n/10)
如果0<n<10,就是n处于00~09之间,这按照题目的意思是无法翻译的,也要translateNum(n/10)
如果10<n<25,那么就是这两位数都是可以翻译的,所以用translateNum(num/10) + translateNum(num/100)递归来计算数量。

题解:

class Solution {
public:
    int translateNum(int num) {
        if (num < 10) return 1;
        return (num%100 < 10 || num%100 > 25) ? translateNum(num/10) : translateNum(num/10) + translateNum(num/100);
    }
};

当时我看到这个大神的代码如此之少,着实震惊了一下。说实话,感觉自己想的跟他想的完全不在一个档次上…官方的解法是运用动态规划,感觉自己还是要好好理解并且消化题目才行,不然连答案都看不懂真是有点太丢脸了…

2.剑指 Offer 47. 礼物的最大价值
在一个 m×n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

示例 1:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 12
解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof

题解:

class Solution {
public:
    int maxValue(vector<vector<int>>& grid) {
        int r = grid.size();
        int c = grid[0].size();
        vector<vector<int>> res(r,vector<int>(c,0));//定义一个二维数组res表示总的价值
        for(int i = 0;i < r; ++i){
            for(int j = 0; j < c; ++j){
                if(i == 0 && j == 0){
                    res[i][j] = grid[0][0];
                }else if(i == 0){//判断边界情况
                    res[i][j] = res[i][j-1] + grid[i][j];
                }else if(j == 0){//判断边界情况
                    res[i][j] = res[i-1][j] + grid[i][j];
                }else{
                    res[i][j] = max(res[i-1][j],res[i][j-1]) + grid[i][j];
                }
            }
        }
        return res[r-1][c-1];
    }
};

这道题还是比较简单的动态规划问题,可能唯一需要注意的地方就是边界情况的判断了。我刚开始还不清楚c++怎么定义一个二维数组,正好学习了一下。

> 初始化一个m x n的二维数组,初始值为0> vector<vector<int>dp(m, vector<int> (n));

今天就先写到这吧…看了很多题目,还是不知道怎么写…加油吧!
你会的越多,你不会的也就越多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值