
力扣
力扣小白开启力扣刷题之路,写下自己的思路及代码。同时去看看网上的优解~
四玺
不会刷力扣的前端不是好程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
力扣第16题-最接近的三数之和(JavaScript语言)
思路(排序+双指针法)(与上一题有点相似,借助上一题的思路)这题其实可以不用去重,就能求得。(我先不用去重做的。想试试去重,结果又是各种坑)代码没有考虑元素去重的代码/** * @param {number[]} nums * @param {number} target * @return {number} */var threeSumClosest = function(nums, target) { nums = nums.sort((a, b) => a - b)原创 2022-02-23 22:52:26 · 359 阅读 · 0 评论 -
力扣第15题-三数之和(JavaScript语言)
思路(双指针)(ps:这是目前为止做的最难的题目。细节太多,坑太多。。。)三重循环超时,坑也多。先将数组排好序。观察要使三数加起来等于0,第一个数a固定好,另外两个数b和c呈现此起彼伏的规则,b和c的查找可以双指针进行一次遍历即可。这样就将三重循环降为二重循环。但是坑还是多。。。具体实现看代码。。。自己写真的会遇见各种坑。。。代码/** * @param {number[]} nums * @return {number[][]} */var threeSum = function(nu原创 2022-02-23 21:17:26 · 384 阅读 · 0 评论 -
力扣第13题-罗马数字转整数(JavaScript语言)
思路一(菜鸡版:if else语句)if else语句就完事。代码/** * @param {string} s * @return {number} */var romanToInt = function(s) { var sum = 0; for (let i = 0; i < s.length; i++) { if (s[i] == 'M') sum += 1000; else if (s[i] == 'C') {原创 2022-02-18 20:53:12 · 455 阅读 · 0 评论 -
力扣第14题-最长公共前缀(JavaScript语言)
思路纵向比较。依次从第一个字符串取出一个字符,将这个字符与之后的所有字符串该位置上的字符做比较,如果都有,将其将入到返回值中。代码/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function(strs) { var res = '';//返回值 for (let i = 0; i < strs[0].length; i++) { let char =原创 2022-02-17 15:31:07 · 312 阅读 · 0 评论 -
力扣第12题-整数转罗马数字(JavaScript语言)
思路一共有7+6种组合,分别为:[1000, “M”], [900, “CM”],[500, “D”],[400, “CD”],[100, “C”],[90, “XC”],[50, “L”],[40, “XL”],[10, “X”],[9, “IX”],[5, “V”],[4, “IV”],[1, “I”]从最大的开始不断做除法。商值为要加入该字符串的次数,余数作为下一次的被除数。代码/** * @param {number} num * @return {string} */var int原创 2022-02-16 17:00:26 · 119 阅读 · 0 评论 -
力扣第11题-盛最多水的容器(JavaScript语言)
思路(双指针法)(ps:暴力求解,每两个值都算一遍肯定就是超时)在初始时,左(l)右®指针分别指向数组的左右两端。容纳的水量计算公式是:(r-l)*min(height[i],height[j])。哪个指针的数值小,这个指针就向另一边移动。移动过程中不断更新容量最大值。代码/** * @param {number[]} height * @return {number} */var maxArea = function(height) { var l = 0, r原创 2022-02-15 18:32:29 · 458 阅读 · 0 评论 -
力扣第10题-正则表达式匹配(JavaScript语言)
思路动态规划。参考以下视频,视频思路很清晰。(赋两张重要的图)视频图解 动态规划 正则表达式代码/** * @param {string} s * @param {string} p * @return {boolean} */var isMatch = function(s, p) { //dp[i][j]:表示s的前i个字符,p的前j个字符是否能够匹配 var dp = new Array(s.length + 1); for (let i = 0; i原创 2022-02-14 17:37:32 · 498 阅读 · 0 评论 -
力扣第9题-回文数(JavaScript语言)
思路(js语法糖)将数字转换为字符串后进行比较。利用好js数组的翻转reverse()函数。代码/** * @param {number} x * @return {boolean} */var isPalindrome = function(x) { if (x.toString() == x.toString().split('').reverse().join('')) return true; return false;};...原创 2022-01-29 21:53:18 · 743 阅读 · 0 评论 -
力扣第8题-字符串转换整数 (atoi)(JavaScript语言)
思路(自己写的菜鸡版)(又是js语法糖。投机取巧版。)使用js的parseInt函数。代码/** * @param {string} s * @return {number} */var myAtoi = function(s) { var i = 0; while (s[i] == ' ' && i < s.length) i++; if (s[i] == '+' || s[i] == '-') i++; if (!(s[i] >原创 2022-01-29 16:00:14 · 773 阅读 · 0 评论 -
力扣第7题-整数翻转(JavaScript语言)
思路(基本就算是js语法糖了)将数字x使用toString()转换为字符串,再使用split()转换为数组,再使用reverse()将数组翻转,再使用join()将数组转换为字符串,最后使用parseInt()将字符串转为整数。代码/** * @param {number} x * @return {number} */var reverse = function(x) { var flag; if (x >= 0) { flag = 1; }原创 2022-01-29 15:09:11 · 694 阅读 · 0 评论 -
力扣第6题-Z字形变换(JavaScript语言)
思路找规律。用一个数组存放按规律摆放的字母,然后按指定顺序读取。存放的时候,需要找规律,有技巧的存放。你会发现i(当i % (numRows - 1) == 0时)行需要都存放。其他行只需要存放一个元素,存放的这个元素的位置也是有规律的,即对于i % (numRows - 1) != 0时,先确定好i,j就是(numRows - 1) - (i % (numRows - 1)),这个a[i][j]就是要存放本次遍历s得到的字母。最好就是写一个例子然后慢慢找规律。代码/** * @param {s原创 2022-01-27 23:58:32 · 390 阅读 · 0 评论 -
力扣第5题-最长回文子串(JavaScript语言)
思路这是一道动态规划题。按以下步骤来。1.确定dp数组以及下标的含义dp[i][j]表示s[i]到s[j]的字符串是否为回文。dp[i][j]=1表示是,dp[i][j]=0表示否。2.确定递推公式如果s[i]!=s[j],dp[i][j]=0;如果s[i]==s[j],dp[i][j]=dp[i+1][j-1]3.dp数组如何初始化i == j的时候,dp[i][j]=1。4.确定遍历顺序根据递推公式和初始化,可以知道遍历顺序为从下到上,从左到右。斜对角都为1。需要注意,j == i原创 2022-01-26 22:58:29 · 491 阅读 · 0 评论 -
力扣第4题-寻找两个正序数组的中位数(JavaScript语言)
思路将两个数组整合成一个新的正序数组,用一个数组存起来。很容易知道这个数组的长度,以及中位数。只需要分一下奇偶的情况。代码/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number} */var findMedianSortedArrays = function(nums1, nums2) { var nums = new Array();//将两个数组正序地存放在这个新数组 var i原创 2022-01-12 21:41:10 · 451 阅读 · 0 评论 -
力扣第3题-无重复字符的最长子串(JavaScript语言)
暴力求解法思路两遍循环代码/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function(s) { var max = 0; for (let i = 0; i < s.length; i++) { var sum = 1; //记录本次无重复字符的最长子串数 var map = new Map(); map.set(原创 2022-01-11 23:53:41 · 358 阅读 · 0 评论 -
力扣第2题-两数相加(JavaScript语言)
方法与思路:具体不需要什么思路,如题所示。注意进位问题,最高位为有进位的话,还得算上,这里容易遗漏。代码var l = new ListNode(0);//注意:返回值应该为l.next var cur = l;//用来遍历链表 var carry = 0;//表示进位 while (l1 != null || l2 != null) { let sum = 0; if (l1 != null) { sum += l1.v原创 2022-01-10 22:40:54 · 836 阅读 · 0 评论 -
力扣第1题-两数之和(JavaScript语言)
简单粗暴法最简单粗暴的方法,两层循环。复杂度顾名思义,就是O(n^2)。/** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) { for (let i = 0; i < nums.length - 1; i++) { for (let j = i + 1; j < nums.length; j原创 2022-01-08 20:38:48 · 532 阅读 · 0 评论 -
vscode如何刷leetcode?(你不知道的vscode插件神器:leetcode插件)
vscode如何刷leetcode(废话,可忽略:作为一个以后可能会从事前端并且用vscode编程的程序员,每天实习工作内容都是一个vscode界面,和一个浏览器页面。不敢光明正大地在公司刷力扣。最近被安利了一个插件,可以刷leetcode,以后就可以摸鱼的时候刷力扣了)开始重点:vscode扩展中直接搜【leetcode】,第一个下载最多的就是了。安装好后,点...原创 2022-01-08 20:30:13 · 1023 阅读 · 0 评论