有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少) 本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第n-2个元素的和, 与本题的要求完全相同). 递归解法: int climbStairs(int n) { ) return n; ) + climbStairs(n-); } 思路很清晰, 递归到当前阶数小于3阶时返回种类(因为比较容易计算, 并非一定是3阶), 这也是求解菲波那切数列的递归解法.…
N皇后问题: 给定8*8棋盘, 放置n个皇后, 使其互相不能攻击(即2个皇后不能放在同一行/列/正反对角线上), 求解共有多少种放置方式? 这个问题的解答网上有不少, 但是位操作解法的我看到的不多. 下面贴出代码和图解, 也就不赘述了. class Solution { public: /* 使用位操作实现的回溯算法. 按行扫描, 检测可以放置的列. * 'limit' - 都是 '1'. 代表着所有列都被占据了 * 'h' - 是目前所有皇后列在行上的垂直投影. 如果 h==limit, 本次…
leetcode 系列文章目录 0. 两数之和1. 两数相加 2. 无重复字符的最长子串 3. 寻找两个有序数组的中位数 4. 最长回文子串 5. Z 字形变换 6. 整数反转 7. 字符串转换整数 (atoi) 8. 回文数 9. 正则表达式匹配 10. 盛最多水的容器 111. 整数转罗马数字…
C#刷遍Leetcode系列文章 索引 索引(陆续发布中,请保持关注) C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介 C#刷遍Leetcode面试题系列连载(2): No.38 - 报数 C# 刷遍 Leetcode 面试题系列连载(3): No.728 - 自除数 C#刷遍Leetcode面试题系列连载(4):No.633 - 平方数之和 C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形 欢迎在留言区留下你的观点,一起讨论提高.如果今天的文章让你…
Leetcode系列之两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素.示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]链接:https://leetcode-cn.com/problems/two-sum/ Python…
翻译 反转一个单链表. 原文 Reverse a singly linked list. 分析 我在草纸上以1,2,3,4为例.将这个链表的转换过程先用描绘了出来(当然了,自己画的肯定不如博客上面精致): 有了这个图(每次把博客发出去后就会发现图怎么变得这么小了哎!仅仅能麻烦大家放大看或者另存为了.这图命名是1400X600的).那么代码也就自然而然的出来了: ListNode* reverseList(ListNode* head) { ListNode* newHead = NULL; wh…
给定有序链表(元素由小到大), 试问如何将其转换为一个平衡BST? 平衡BST: 任意节点的左右子树的深度差值不大于1. 主要思想是用递归. Trick是使用快慢指针来获取中间节点. 获得中间节点后, 将其设为此次递归的root, 随后删除此节点, 并将前一节点的next置NULL. 随后, 对中间节点的前后部分分别进行递归调用, 并将返回值作为其左右子树. 代码如下: /** * Definition for singly-linked list. * struct ListNode { *…
问: 给定二叉树, 如何计算二叉树最大深度? 算法描述如下: 如果当前节点为空, 返回0(代表此节点下方最大节点数为0) 如果当前节点不为空, 返回(其左子树和右子树下方最大节点数中的最大值+1) 上述算法的精髓在于递归调用中的终止条件. 代码如下: /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val…
给定一个整数数组(长度不小于3) 和 一个目标值, 从数组中找出3个元素, 使得它们的和与目标值最接近, 返回这个和. 可以认为每个输入的组合都是只有唯一解的. 解法思路参考: Finding three elements in an array whose sum is closest to an given number. 我们首先将问题P转化为P': 能否从数组中找到3个元素, 使得它们的和最接近0? 这个转化非常简单, 只需要将原数组中的每个数都减去目标值的1/3即可. 随后我们解决P'…
本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最后一个元素--中间元素)加上右子列的最大前缀子列(即包含右子列第一个元素--中间元素) 步骤3. 返回三者中的最大值(左子列最大值, 右子列最大值, 二者拼接最大值). class Solution…