力扣刷题
ECHO-W
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
力扣62.不同路径(全部解法详解)
题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/unique-paths著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解法 起点:(0,0);终点(m - 1,n- 1);值:从起点到目标点有多少原创 2021-03-22 12:44:50 · 607 阅读 · 0 评论 -
力扣509. 斐波那契数
题目: 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: 示例: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 解法 两种方法,自顶向下;自底向上。 代码 //Botton-up //自底向上 class Solution { public: int fib(int n) { if (n == 0) return 0;原创 2021-03-09 15:25:09 · 259 阅读 · 0 评论 -
力扣78. 子集
题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例: 输入:**nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 解法 分割问题,组合问题都是收集叶子节点问题 子集问题,是寻找树的所有节点。 代码 class Solution { public: vector<vector<int>> r原创 2021-03-01 16:31:56 · 296 阅读 · 0 评论 -
力扣7. 整数反转
题目: 给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例: 解法 两种解法:一种是每一次切割末尾数后,判断if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7) 其实num == INT_MAX / 10 && tmp &原创 2021-02-28 01:56:44 · 341 阅读 · 0 评论 -
力扣131. 分割回文串
题目: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 解法 分割问题也是组合问题 如何模拟分割线:将判断回文加入到for循环中,先找到第一个分割线,加入到path中,在进行下一个递归寻找。 递归的主要逻辑就是找到一条分割线。 因为这是一个集合中找组合所以需要startIndex。 代码 class Solution { private: vector<vector<string>> res; vecto原创 2021-02-27 15:04:09 · 160 阅读 · 0 评论 -
力扣39. 组合总和
题目: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 示例: 解法 有时候剪枝不止需要加上附加条件,还需要对原有数据集进行改动,比如排序。 代码 class Solution { public: vector<int> path; vector<vector<int>> res; voi原创 2021-02-26 10:06:11 · 198 阅读 · 0 评论 -
力扣17. 电话号码的字母组合
题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: **输入:**digits = “23” 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 解法 代码 class Solution { private: const string letterMap[10] = {原创 2021-02-26 02:26:22 · 330 阅读 · 0 评论 -
力扣216. 组合总和 III
题目: 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 示例: 输入: k = 3, n = 7 输出: [[1,2,4]] 解法 sum记录当前和,可以在函数调用中相加,可以节省一部回溯的步骤。 优化剪枝:在数字没到数量限制时,和已经大于目标和时。 if (sum > n) return; 代码 class Solution { private: vector<int> path; vector&l原创 2021-02-26 01:52:50 · 200 阅读 · 0 评论 -
力扣77. 组合
题目: 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 示例: 解法 注意startIndex的开始值,因为它不是索引,所以需从1开始。 代码 class Solution { public: vector<int> path; vector<vector<int>> res; void backtracking(int n, int k, int startIndex) { if (原创 2021-02-25 10:59:18 · 165 阅读 · 0 评论 -
力扣654. 最大二叉树
题目: 给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下: 二叉树的根是数组 nums 中的最大元素。 左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。 右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。 示例: 解法 构建二叉树一般用的前序,因为先构建根节点 一般情况来说:如果让空节点(空指针)进入递归,就不加if,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整。 代码 class Solution { public:原创 2021-02-25 10:08:34 · 212 阅读 · 0 评论 -
力扣113. 路径总和 II
题目: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 解法 递归 递归回溯,记count值,当count==0时,则找到路径,push_back给res数组 定义额外的数组path记作路径, 代码 class Solution { private: vector<vector<int>> res; vector<int> path; void traversal(Tre原创 2021-02-16 21:55:39 · 263 阅读 · 0 评论 -
力扣112. 路径总和
题目: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。 叶子节点 是指没有子节点的节点。 示例: 输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22 输出:true 解法 代码 class Solution { public: bool hasPathSum(TreeNode*原创 2021-02-16 16:58:47 · 316 阅读 · 0 评论 -
力扣160. 最浪漫的相交链表
路至尽头,不见君,待到相遇,君亦如我 题目: 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 解析: 链表A和B相交与否先不论,根据A+B = B + A。那么两指针先走完自己的链表后,再走对方的链表。那么两个链表走过的路程相等。 那么如果相交,可以看作将相交部分去掉,那么两个指针先走完彼此的路,最后携手走上共同的路。(是不是有点浪漫) 代码如下: class Solution { public: ListNode *getIntersectionNode(ListNode .原创 2021-02-02 22:15:50 · 191 阅读 · 0 评论 -
力扣513. 找树左下角的值
题目: 给定一个二叉树,在树的最后一行找到最左边的值。 示例: 输入: 2 /\ 1 3 输出: 1 解法 题目要求【找到最后一行】,【最左边的节点值】 想到层序遍历 每次层序遍历,记录最左边的值。 代码 class Solution { public: int findBottomLeftValue(TreeNode* root) { queue<TreeNode*> que; if(root) que.push(root); i原创 2021-02-16 15:09:15 · 190 阅读 · 0 评论 -
59. 螺旋矩阵 II
题目 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例 [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 解法 将上下左右作为记录索引工具 class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> res(n);原创 2021-01-31 23:06:09 · 170 阅读 · 0 评论 -
回文总结
在三种方法之前,须知:所有负数都不是回文!并且以0为结尾都不是回文。 于是有x<0||(x%10==0&&x!=0) 方法一 转换字符串判断 将int型整数转化成字符串,再逐个字符判断。 class Solution { public: bool isPalindrome(int x) { bool result; if (x < 0) { return false;原创 2021-01-31 23:04:14 · 225 阅读 · 0 评论
分享