![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode+剑指offer
MOYIxxxx
辣鸡程序猿一个
展开
-
Leetcode 752打开转盘锁
题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨...原创 2019-06-25 14:55:36 · 115 阅读 · 0 评论 -
剑指offer(13) 调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路代码的完整性这个题呢,需要调整奇偶数的顺序,而且原先的相对位置不变。头指针从左向右遍历,直至遇到第一个偶数,将偶数取出,尾插到数组中。class Solution {public: void r...原创 2018-12-04 06:38:17 · 83 阅读 · 0 评论 -
剑指offer(12)数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路代码的完整性:考虑到各种意外的情况这里面的特殊情况主要是,base为负数,exponent为负数,base为0,exponent为0;class Solution {public: double Power(double base, int expon...原创 2018-12-04 06:17:25 · 94 阅读 · 0 评论 -
Leetcode(18)四数之和
题目描述给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...原创 2018-12-04 06:06:32 · 143 阅读 · 0 评论 -
Leetcode(17)电话号码的字母组合
题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].解题思路考查要点:字符串 回溯算法回溯算法:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试...转载 2018-12-04 05:46:47 · 147 阅读 · 0 评论 -
剑指offer(11)二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路一个数,自身和自身减一与运算,会将右边最后一个不为1的变为0,一直循环,直到变为0;class Solution {public: int NumberOf1(int n) { int count=0; while(n!=0) { ...原创 2018-12-03 16:34:12 · 98 阅读 · 0 评论 -
剑指offer(14)链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路输出的是 倒数第k个链表,可以参考Leetcode删除链表倒数节点的那个算法题一共有两种解法,一是两遍遍历的,二是一遍遍历的。两次遍历的思路就是先遍历一遍 求出链表长度,然后在遍历,输出N-k+1的节点。这道题靠鲁棒性,需要考虑各种情况,比如可能不存在倒数第k个结点。代码如下/*struct ListNode { int ...原创 2018-12-08 17:20:37 · 66 阅读 · 0 评论 -
Leetcode(22)括号生成
题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路回溯法只有在我们知道序列仍然保持有效时才添加 ‘(’ or ‘)’,而不是像方法一那样每次添加。我们可以通过跟踪到目前为止放置的左括号和右括号...原创 2018-12-08 15:54:28 · 69 阅读 · 0 评论 -
Leetcode(19)删除链表的倒数第N个节点
题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解题思路方法一、遍历两次链表删除倒数n的节点,首先需要知道整个链表的长...原创 2018-12-08 15:44:46 · 100 阅读 · 0 评论 -
剑指offer(9) 变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:f(1) = 1f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。f(3) = f(3-1) + f(3-2) + f(3-3)…f(n) = f(...原创 2018-12-01 06:26:17 · 88 阅读 · 0 评论 -
剑指offer(8) 跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)...原创 2018-12-01 06:21:13 · 77 阅读 · 0 评论 -
Leetcode(12)整数转罗马数字
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的...原创 2018-12-01 06:13:04 · 85 阅读 · 0 评论 -
剑指offer(10) 矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?*解题思路小矩形可以横放可以竖放,则第一步一共有两种方法,竖放或横放。在竖放之后的话,涉及到的就是用n-1个21的小矩形覆盖2(n-1)的大矩形的方法。如果要是横放的话,则横放的下面必须有一个横放的矩形,所以就是用n-2个21的小矩形覆盖2(n-2)的大矩形的方法...原创 2018-12-03 07:29:54 · 94 阅读 · 0 评论 -
Leetcode(23)合并K个排序链表
题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6解题思路转化为两两链表合成问题/** * Definition for singly-linked list. *...原创 2018-12-09 07:34:48 · 123 阅读 · 0 评论 -
Leetcode(24)两两交换链表中的节点
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路这个就是个很简单的判断啊什么的,主要是链表的相邻节点交换的时候要注意一下/** * Definiti...原创 2018-12-09 07:42:30 · 120 阅读 · 0 评论 -
剑指offer(15)反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* ...原创 2018-12-09 07:53:42 · 92 阅读 · 0 评论 -
剑指Offer(19)包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。代码class Solution {public: void push(int value) { datestack.push(value); if(minstack.empty()) minstack.push(...原创 2019-04-08 07:28:08 · 76 阅读 · 0 评论 -
Leetcode(107)二叉树的层次遍历2
题目描述给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]class Solution {p...原创 2019-04-08 07:22:00 · 118 阅读 · 0 评论 -
Leetcode(104)二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。代码class Solution {public: int maxDepth(TreeNode* root...原创 2019-04-08 07:16:11 · 92 阅读 · 0 评论 -
Leetcode(69) x的平方根
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。解题思路直接循环判断,二分法查找。class Solution {pu...原创 2019-02-27 08:54:54 · 476 阅读 · 0 评论 -
Leetcde(67)二进制求和
题目描述给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”解题思路每位转十进制然后相加吧代码class Solution {public: string addBina...原创 2019-02-27 08:30:37 · 81 阅读 · 0 评论 -
剑指offer(17)数的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路class Solution { bool isSubtree(TreeNode* pRootA, TreeNode* pRootB) { if (pRootB == NULL) return true; if (pRootA == NULL) r...原创 2018-12-11 13:58:07 · 116 阅读 · 0 评论 -
Leetcode(29)两数相除
题目描述给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3输出: 3示例 2:输入: dividend = 7, divisor = -3输出: -2解题思路基本思路使用移位和加...转载 2018-12-11 12:50:06 · 132 阅读 · 0 评论 -
Leetcode(25) K个一组翻转链表
题目描述给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->...原创 2018-12-11 12:31:41 · 115 阅读 · 0 评论 -
剑指offer(18) 二叉树的镜像
题目描述*操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 *解题思路是一个递归的思路,二叉树可以转换为最小的子树结构,然后对最小的子树进行镜像即可。class Solution {public: void Mirror(TreeNode *pRoot) { if(pRoot==NULL){ retur...原创 2018-12-15 23:50:55 · 76 阅读 · 0 评论 -
Leetcode(30) 与所有单词相关联的字串
题目描述给定一个字符串 s 和一些长度相同的单词 words。在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”,words = [“foo”,“bar”]输出: [0,9]解释: 从索引 0 ...原创 2018-12-15 23:43:57 · 143 阅读 · 0 评论 -
Leetcode(10) 正则表达式匹配
题目描述给定一个字符串 (s) 和一个字符模式 §。实现支持 ‘.’ 和 '’ 的正则表达式匹配。‘.’ 匹配任意单个字符。‘’ 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 。示例 1:输入:s = “aa”p = “a”输出...转载 2018-12-15 23:23:47 · 89 阅读 · 0 评论 -
剑指offer(16)合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路新建一个链表,存储合并后的链表,返回class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode* res=new ListNode(0)...原创 2018-12-09 08:01:46 · 105 阅读 · 0 评论 -
Leetcode(16)最接近的三数之和
题目描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解题思路与三数之和类似,只不过是求...原创 2018-12-03 07:13:22 · 106 阅读 · 0 评论 -
Leetcode(15)三数之和
题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]解题思路以前做过两数之和的...原创 2018-12-03 06:57:13 · 505 阅读 · 0 评论 -
剑指offer(5)用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路需要用栈来模拟队列的Push和Pop操作。要知道,栈是先进后出,而队列是先进先出,所以用栈实现队列的时候,需要两个栈,进栈可以直接进栈就OK,但是需要首先将两个栈合为一个栈,但是出栈的话,需要将原先一个栈中的元素都出栈到另一个栈中,这样才能取到第一个进栈的元素。Push:将元素进栈APo...原创 2018-11-28 06:21:06 · 104 阅读 · 0 评论 -
leetcode(66)加一
题目描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。解题...原创 2018-11-22 16:30:45 · 94 阅读 · 0 评论 -
剑指offer(3)从尾到头打印链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路直接遍历就OK了class Solution {public:vector printListFromTailToHead(ListNode* head) {vector v;while(head != NULL){v.insert(v.begin(),head->val);head = h...原创 2018-11-23 17:28:17 · 62 阅读 · 0 评论 -
Leetcode(3)无重复字符的最长字串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “w...原创 2018-11-23 17:23:29 · 357 阅读 · 0 评论 -
Leetcode(38) 报数
题目描述*报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。...原创 2018-11-19 12:23:08 · 121 阅读 · 4 评论 -
Leetcode(26)删除排序数组中的重复项
题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 ...原创 2018-11-16 13:00:21 · 88 阅读 · 0 评论 -
剑指offer(1)二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路方法一 最最最简单的,直接便利全部元素,有相同的就返回true,没有就返回false缺点就是太费时间了代码如下class Solution {public: bool F...原创 2018-11-18 20:49:10 · 108 阅读 · 1 评论 -
Leetcode(13)罗马数字转整数
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的...原创 2018-11-12 08:34:52 · 153 阅读 · 0 评论 -
Leetcode(20)有效的括号
题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入:...原创 2018-11-14 07:56:10 · 140 阅读 · 0 评论 -
Leetcode(21)合并两个有序链表
题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路单项有序链表嘛,无非是指针的操作,两个有序链表,将其合并为一个有序链表,只需逐个判断其大小,然后操作原创 2018-11-15 13:59:21 · 104 阅读 · 0 评论