数据结构与算法
力扣的一些算法题
ZHZ98
为人亲和,自成一派
展开
-
爬楼梯 ---力扣(javascript)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2 输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶 示例 2:输入: 3 输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶动态规划非常经典的一道题,动态规划+缓存来解决/** * @param {number} n * @r原创 2020-09-22 16:18:53 · 194 阅读 · 0 评论 -
字符串转换整数 (atoi)----力扣(javascript)
题目:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有原创 2020-07-26 16:12:27 · 264 阅读 · 0 评论 -
图像旋转 ----力扣(javascript)
题目:给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ],原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]示例 2:给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10]原创 2020-07-23 17:20:40 · 214 阅读 · 0 评论 -
字符串相乘 ----力扣(javascript)
题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。 num1 和 num2 只包含数字 0-9。 num1 和 num2 均不以零开头,除非是数字 0 本身。 不能使用任何标准库的大数原创 2020-07-21 18:02:31 · 1403 阅读 · 0 评论 -
电话号码组合 ---力扣(javascript)
题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序/** * @param {string} digits * @return {string[]} */var letterCombi原创 2020-07-18 17:53:04 · 1834 阅读 · 0 评论 -
罗马数字转整数 和 整数转罗马数字---力扣(javascript)
题目:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。原创 2020-07-17 12:20:27 · 248 阅读 · 0 评论 -
搜索旋转排序数组 ---力扣(javascript)
题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], ta原创 2020-07-15 16:39:13 · 290 阅读 · 0 评论 -
实现 strStr() ---力扣(javascript)
题目:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试原创 2020-07-14 18:39:38 · 308 阅读 · 0 评论 -
移除元素 ---力扣(javascript)
题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3],val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3原创 2020-07-13 09:55:23 · 177 阅读 · 0 评论 -
删除排序数组中的重复项 ---力扣(javascript)
题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组原创 2020-07-12 10:41:56 · 388 阅读 · 0 评论 -
搜索插入位置 ---力扣(javascript)
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0解题思路:首先我看到这道题,先想到的是暴力法,当数组的第一个数如果大于了目标值,则这个数插入的位置是第原创 2020-07-10 18:24:02 · 227 阅读 · 0 评论 -
最长公共前缀 ---力扣(javascript)
题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”] 输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解题思路:解法一:逐个比较第一种方法就是暴力破解,让第一个字符串成为最长公共子串,从前往后依次比较,这种方法占内存,但是耗时不长/** * @原创 2020-07-08 11:49:41 · 459 阅读 · 0 评论 -
有效的括号 ---力扣(javascript)
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true解题思原创 2020-07-06 11:13:36 · 2096 阅读 · 0 评论 -
回文数 ---力扣(javascript)
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。解题思路我用的解法是字符串翻转,先将测试的数字转为字符串,因为数组有reserve()的方法,所以需要把原创 2020-07-03 11:37:09 · 402 阅读 · 1 评论 -
整数反转 ----力扣(javascript)
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:解题思路:我的解决办法是通过数组的反转方法,在js中一个数要想转为数组,首先需要把数转为字符串,然后再将字符串转为数组/** * @param {number} x * @return {number} */var reverse = function(x) { let原创 2020-06-30 09:46:10 · 348 阅读 · 0 评论 -
两数之和 ---力扣(javascript)
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]解题思路:看到这道题,当然我们会觉得很简单,思路我也是有的,首先我们会用最常用的暴力破解法去解决它,通过两个for循环去遍历数原创 2020-06-28 17:15:38 · 807 阅读 · 0 评论