算法编程
记录leetcode和牛客网的编程
却顾所来径
当你老了,回顾一生,就会发觉:什么时候出国读书、什么时候决定做第一份职业、何时选定了对象而恋爱、什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯,你作出抉择的那一日,在日记上,相当的沉闷和平凡,当时还以为是生命中普通的一天。
展开
-
leetcode 264. 丑数 II(动态规划)
题目描述:编写一个程序,找出第n个丑数。丑数就是只包含质因数2, 3, 5的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前10个丑数。说明:1是丑数。 n不超过1690。 思路:动态规划思想。后面的丑数一定是由前面的丑数乘以2、3或5得到。所以第n个丑数一定是由前n...原创 2018-05-23 23:36:12 · 3380 阅读 · 0 评论 -
leetcode 28. 实现strStr() (leetcode 2828. Implement strStr())--java KMP算法
题目描述:实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa"...原创 2019-02-09 10:23:16 · 134 阅读 · 0 评论 -
leetcode 876. 链表的中间结点
题目描述:给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val =...原创 2018-11-14 18:55:06 · 148 阅读 · 0 评论 -
leetcode 203. Remove Linked List Elements
题目描述:Remove all elements from a linked list of integers that have valueval.Example:Input: 1->2->6->3->4->5->6, val = 6Output: 1->2->3->4->5代码:class Soluti...原创 2018-10-30 20:26:08 · 114 阅读 · 0 评论 -
leetcode 73. 矩阵置零-Set Matrix Zeroes
题目描述:给定一个mxn的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例2:输入: [ [0,1,2,0], [3,4,5,2], [1,3...原创 2018-10-23 21:51:53 · 175 阅读 · 0 评论 -
leetcode 872. 叶子相似的树
题目描述:请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个叶值序列。举个例子,如上图所示,给定一颗叶值序列为(6, 7, 4, 9, 8)的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是叶相似的。如果给定的两个头结点分别为root1和root2的树是叶相似的,则返回true;否则返回false。提示:给定...原创 2018-10-17 18:43:39 · 124 阅读 · 0 评论 -
leetcode 700. 二叉搜索树中的搜索(二叉搜索树)
题目描述:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ ...原创 2018-10-17 18:25:06 · 404 阅读 · 0 评论 -
leetcode 590. N叉树的后序遍历
题目描述:给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个3叉树:返回其后序遍历:[5,6,3,2,4,1].代码:递归版本:class Solution { public List<Integer> postorder(Node root) { List<Integer> list=new ...原创 2018-10-17 18:16:00 · 488 阅读 · 0 评论 -
leetcode 559. N叉树的最大深度
题目描述:给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个3叉树:我们应返回其最大深度,3。说明:树的深度不会超过1000。 树的节点总不会超过5000。简单题,直接贴代码:代码:class Solution { public int maxDepth(Node roo...原创 2018-10-17 17:42:20 · 252 阅读 · 0 评论 -
leetcode 77. Combinations(java)
题目描述:Given two integersnandk, return all possible combinations ofknumbers out of 1 ...n.Example:Input:n = 4, k = 2Output:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]代码...原创 2018-10-16 17:13:13 · 355 阅读 · 0 评论 -
leetcode 783. 二叉搜索树结点最小距离(递归和非递归实现java)
题目描述:给定一个二叉搜索树的根结点root, 返回树中任意两节点的差的最小值。示例:输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树结点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \ ...原创 2018-09-29 21:54:20 · 1030 阅读 · 0 评论 -
leetcode 791. 自定义字符串排序
题目描述:字符串S和T只包含小写字符。在S中,所有字符只会出现一次。S已经根据某种规则进行了排序。我们要根据S中的字符顺序对T进行排序。更具体地说,如果S中x在y之前出现,那么返回的字符串中x也应出现在y之前。返回任意一种符合条件的字符串T。示例:输入:S = "cba"T = "abcd"输出: "cbad"解释: S中出现了字符 "a", "b", "c",...原创 2018-09-26 22:03:09 · 227 阅读 · 0 评论 -
leetcode 69. x 的平方根(java) (牛顿迭代法解析)
题目描述:实现int sqrt(int x)函数。计算并返回x的平方根,其中x是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。方法一、二分法:很容易想到,所以...原创 2018-09-16 22:29:38 · 1619 阅读 · 2 评论 -
leetcode 859. 亲密字符串(java)
题目描述:给定两个由小写字母构成的字符串A和B,只要我们可以通过交换A中的两个字母得到与B相等的结果,就返回true;否则返回false。示例 1:输入: A = "ab", B = "ba"输出: true示例 2:输入: A = "ab", B = "ab"输出: false示例 3:输入: A = "aa", B = "...原创 2018-09-15 20:41:08 · 508 阅读 · 0 评论 -
leetcode 22. 括号生成(java)--leetcode 22. Generate Parentheses(分支限界)
题目描述:给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n=3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]分析: 这个貌似叫剪枝算法or分支界限算法?有点记不清了。不过也没多大关系。思路其实和二叉树的前序遍历递...原创 2018-09-15 15:10:57 · 1937 阅读 · 1 评论 -
leetcode 443. 压缩字符串
题目描述:给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应...原创 2018-09-15 13:21:34 · 784 阅读 · 0 评论 -
leetcode 819. 最常见的单词(java)--leetcode 819. Most Common Word
题目描述:给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入: paragraph = "Bob hit a ball, the hit BALL flew fa...原创 2018-09-15 10:57:22 · 669 阅读 · 0 评论 -
leetcode 551. 学生出勤纪录 I(java)
题目描述:给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个字符:'A': Absent,缺勤 'L': Late,迟到 'P': Present,到场如果一个学生的出勤纪录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。你需要根据这个学生的出勤纪录判断他是否会被奖赏。示例 1:输入: "PPALLP"输出: Tr...原创 2018-09-14 23:42:11 · 413 阅读 · 0 评论 -
leetcode 20. 有效的括号(java)
题目描述:给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出:...原创 2018-09-14 22:36:18 · 636 阅读 · 0 评论 -
leetcode 500. 键盘行(java)--500. Keyboard Row
题目描述:给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例1:输入: ["Hello", "Alaska", "Dad", "Peace"]输出: ["Alaska", "Dad"]注意:你可以重复使用键盘上同一字符。 你可以假设输入的字符串将只包含字母。代码:class Solution {原创 2018-09-14 09:50:06 · 376 阅读 · 0 评论 -
leetcode 17. 电话号码的字母组合(回溯)
题目描述:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。分析:...原创 2018-09-14 08:45:19 · 2824 阅读 · 1 评论 -
leetcode 28. 实现strStr() (leetcode 2828. Implement strStr())--java KMP算法
题目描述:实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa"...原创 2018-09-13 00:17:35 · 168 阅读 · 0 评论 -
459. 重复的子字符串(java)
题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。示例 2:输入: "aba"输出: False示例 3:输入: "abcabcabcabc"输出: True解释: 可...原创 2018-09-12 21:29:23 · 741 阅读 · 0 评论 -
leetcode 434. 字符串中的单词数
题目描述:Count the number of segments in a string, where a segment is defined to be a contiguous sequence of non-space characters.Please note that the string does not contain any non-printable charact...原创 2018-09-11 22:12:24 · 458 阅读 · 0 评论 -
leetcode 387. 字符串中的第一个唯一字符
题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2. 注意事项:您可以假定该字符串只包含小写字母。两种代码:entrySet()和keySet(),最后都能ac,区别:entrySet()方法能一次性获得key和value。ke...原创 2018-09-11 21:01:44 · 314 阅读 · 0 评论 -
leetcode 58. 最后一个单词的长度
题目描述:给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5分析:设置i指向字符串末尾,从后向前遍历,若当前i 指向的字符为空格,继续前移,即执行i--操作,若i最后小于0,即i=-1,说明-1后面的都...原创 2018-09-11 20:04:59 · 162 阅读 · 0 评论 -
leetcode 125. 验证回文串(java)
题目描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false分析:首先特殊情况分开讨论,s.length()==0,s="...原创 2018-09-11 19:10:15 · 1071 阅读 · 0 评论 -
leetcode 67. 二进制求和
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"代码:class Solution { public String addBinar原创 2018-09-11 17:48:47 · 93 阅读 · 0 评论 -
leetcode 345. 反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: "hello"输出: "holle"示例 2:输入: "leetcode"输出: "leotcede"说明:元音字母不包含字母"y"。代码1:public class Solution { public String reverseVowels(String s) { ...原创 2018-09-11 15:52:21 · 157 阅读 · 0 评论 -
leetcode 541. 反转字符串 II
题目描述:给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"要求:该字符串只包含小写的英文字母。 给定字符...原创 2018-09-11 13:22:49 · 391 阅读 · 0 评论 -
leetcode 696. 计数二进制子串(java动态规划法)
题目描述:给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它...原创 2018-09-10 21:10:47 · 283 阅读 · 0 评论 -
leetcode 824. 山羊拉丁文
题目描述:给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头(a, e, i, o, u),在单词后添加"ma"。 例如,单词"apple"变为"applema"。 如果单词以辅音字母开头(即非元音字母),移除第一个字符...原创 2018-09-10 17:38:50 · 156 阅读 · 0 评论 -
leetcode 788. 旋转数字(java)
题目描述:我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。现在我们有一个正整数 N...原创 2018-09-09 17:09:18 · 652 阅读 · 0 评论 -
leetcode 520. 检测大写字母(java)
题目描述:给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如"USA"。 单词中所有字母都不是大写,比如"leetcode"。 如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。否则,我们定义这个单词没有正确使用大写字母。示例 1:输入: "USA"输出: True示例 2:...原创 2018-09-09 16:07:27 · 608 阅读 · 0 评论 -
Leetcode 557. 反转字符串中的单词 III(Java)
题目描述:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。代码:class Solution { pu...原创 2018-09-09 14:56:04 · 1409 阅读 · 0 评论 -
leetcode 657. 机器人能否返回原点
题目描述:在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。注意:机器人“面朝”的方向无关紧要。 “R”...原创 2018-09-07 16:20:20 · 1147 阅读 · 0 评论 -
leetcode 709. 转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。 示例 1:输入: "Hello"输出: "hello"示例 2:输入: "here"输出: "here"示例 3:输入: "LOVELY"输出: "lovely"class Solution { publ原创 2018-09-06 22:31:32 · 197 阅读 · 0 评论 -
leetcode 14. 最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明原创 2018-08-21 19:44:27 · 136 阅读 · 0 评论 -
leetcode 13. 罗马数字转整数
罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。...原创 2018-08-21 19:05:38 · 128 阅读 · 0 评论 -
leetcode 12. 整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2018-08-21 16:15:31 · 149 阅读 · 0 评论