- 博客(11)
- 收藏
- 关注
原创 leetcode 64 最小路径和
动态规划,从右下角算到左上角。class Solution {public: int minPathSum(vector<vector<int>>& grid) { int h = grid.size(), w = grid[0].size(); if(h == 0 && w == 0) return ...
2019-10-09 14:16:16 115
原创 leetcode 39 组合总和
回溯法按照自己总结的标准模版想出来的。 时间击败91%需要注意的点:1)传引用,不然修改是无效的2)for循环跳出是要continue而不是break,不然target=7, candidates=[8,6,3,4]这种时候就会被前面的8直接卡住跳出来,找不到后面的3,4了3)dfs递归的时候需要传i而不是i+1,因为一个数字可以取多次class Solution ...
2019-10-08 21:30:45 90
原创 leetcode 22 括号生成
回溯法,这里注意1)string 是可以直接用+号在后面拼接字符的;2)回溯法的参数(结果,当前序列,序列size,start, end);3)先写递归结束条件,再写递归,注意push之后要有pop相对应。class Solution {public: vector<string> generateParenthesis(int n) { v...
2019-10-03 18:40:51 115
原创 leetcode 31 下一个排列
注意字典序最大,就是下一个排序,是全部比当前排序大排序中的最小的情况。因此首先找到第一个反序的位置,之后找到次大数和它交换,再把后面全部数字reverse即可。class Solution {public: void nextPermutation(vector<int>& nums) { if(nums.size() == 0) retur...
2019-10-03 18:13:00 76
原创 leetcode 198 打家劫舍
动态规划入门问题。tips:初始状态设f(-1) = f(0) = 0,简化运算。class Solution {public: int rob(vector<int>& nums) { int sz = nums.size(); int res = 0; if(sz == 0) return 0; ...
2019-10-03 09:46:04 91
原创 leetcode 141 环形链表
快慢指针典型问题,但我一开始总是报错:Line 18: Char 26: runtime error: member access within null pointer of type 'struct ListNode' (solution.cpp)但我一直在移动指针之前判断是否非空,不知道为什么会出现这种问题。后来发现是这个句子if(p2->next->nex...
2019-10-03 09:14:48 211
原创 leetcode 70 爬楼梯
可以发现这是一个斐波那契数列问题,一开始用递归超出时间限制,想起dp。但是看评论想起来只需要前两项即可,即设置两个int缓存一下就可以。class Solution {public: int climbStairs(int n) { if(n == 0) return 0; if(n == 1) return 1; if(n ==...
2019-10-02 20:57:30 101 1
原创 leetcode 53 最大子序和
这道题很典型,第一时间想到动态规划。但题目中说可以用更加巧妙的分治法,于是用此法实现了下。一开始看到java的代码,但用c++写到一般发现把半个数组当作参数传有点费事,于是修改了参数,重新写了help函数辅助。后来数组就一直越界,肯定是边界条件没有处理干净。后总结了一套边界处理但方法,以后可以沿用。在对数组做划分的时候,参数(a,b)全部为下标,即b为sz-1。中间两个值l=(a...
2019-10-02 16:29:47 170
原创 leetcode 101 对称二叉树
看到题目第一时间想到递归,但苦于在一棵树上怎样实现左右子树但比较。后来看了官方题解,发现使用两个参数,相当于独立比较两棵树,实现起来也很简洁。链接https://leetcode-cn.com/problems/symmetric-tree/solution/dui-cheng-er-cha-shu-by-leetcode//** * Definition for a binar...
2019-10-02 15:03:25 47
原创 leetcode 160 相交链表
一开始但想法是1)先用两个指针从头到尾遍历两个链表,记录下两个链表但长度m,n。2)两个指针从头开始,让长链表中的指针先走m-n步,然后两个指针一起走,遇到相同的时候就是相交节点。后来看了官方题解第三种方法,也是两个指针,觉得很有趣就实现了这个方法。遇到的问题:一开始设置了一个ListNode* res, 没有赋值,在找不到相交节点的时候默认返回res。本以为会返回空节点,跑样例的...
2019-10-02 14:45:56 72
原创 LeetCode 155 最小栈
主要参考:https://blog.csdn.net/SoulOH/article/details/812680641.用两个栈实现2.用一个栈实现,遇到最小值改变的情况需要push或者pop两次。但在实现过程中,push操作一开始我使用了<而不是<=,wa了。原因:等号情况下最小值虽然不会改变,但因为pop操作默认在遇到最小值情况下会弹出两次,如果之前之push了...
2019-10-02 14:08:19 86
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人