leetcode算法题(JavaScript实现)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题外话

刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象、String对象等原生方法,构造函数、一些算法题等。每次submit之后,看看自己的代码,再看看别人写的代码。发现自己写的代码和实现实现思路简直弱爆了。于是,每次都会在submi完之后,会看看Top five的答案,理解大牛们的解题思路(大多数情况下,代码会使用ES6的语法,非常简洁),然后train again。按照这种方法,练习了将近20来天的时间。这是我在codewars上的成果,5kyu,刷了93题,有一些题目实在想不到,就unlock solutions了。因此Honor Completed Kata并不是100%。

最近开始玩leetcode了,换个plaform主要是因为leetcode上的题目大多都是各大互联网公司的面试题目,而且大多偏向算法。恰巧我最近迫切的想要提高这方面的能力。于是转移了plaform,虽然我有些不舍:"( 。但是我还是会持续玩codewars的/

1-20 leetcode个人解题思路


实现思路:创建一个空数组,写两层循环。第二层循环的变量初始化是基于第一次循环的。接着做判断,如果nums[i] + nums[j] === target,就退出循环。

var twoSum = function(nums, target) {
    let index = [];
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            if (nums[i] + nums[j] === target) {
                index.push(i);
                index.push(j);
                break;
        }
    }
}
    return index;
};

ZigZag Conversion(Difficulty: Easy; Tags: String)


首先,要想完成这道题目,需要明白的是。ZigZag pattern与给定的行数有什么关系。

很简单,只有2行、3行、4行时zigzag的形状分别如下

这个题目主要的思路是明白给定的行数与每行中需要提取的字母位置之间的关系。

  1. 当只有一行时,直接返回原字符串
  2. 当大于一行时,第一行和最后一行的规律相同,即(假定指定行数是n,此时n>1)每个圆圈(代码一个值)都是每隔[ n - (n - 2) ] * (n - 1)个位置出现一次
  3. 除了第一行和最后一行,中间行数圆圈的分布也有规律:画蓝色箭头的后一个值与前一个值相差 2 * (n - 1)个位置,画绿色箭头的两个值也遵循这个规律。因此,实现代码如下

var convert = function(s, numRows) {
    if (numRows === 1) return s;
    let str = '';
    let num = (numRows - (numRows - 2)) * (numRows - 1);    //2
    for (let i = 1; i <= numRows; i++) {
        for (let j = i - 1; j < s.length; j += num) {
            if (i === 1 || i === numRows) {
                str += s.slice(j, j + 1);
            } else {
                str += s.slice(j, j + 1);
                str += s.slice(j + num - (2 * (i - 1)), j + num - (2 * (i - 1)) +   1);
            }
        }
    }
    return str;
};
console.log(convert("123456789", 2));               //135792468
console.log(convert("123456789", 3));               //159246837
console.log(convert("123456789", 4));               //172683594
console.log(convert("1234567891234567891234", 5));  //1982817937261463524543


这道题目挺有意思,题目很直接,让我们将input的指reverse。但是有要求,就是当reverse的值如果超过32bit,就要返回0。

思路是使用JS的或运算|,即位运算符,将reverse的值转换成32位,然后再与原值作比较。

Math.pow(2, 32)|0 返回0 (Math.pow(2, 32) + 1)|0 返回1。因此解题逻辑为

var reverse = function(x) {
    let str1 = x.toString().match(/[0-9]/g).reverse().join('');
    let str2 = x.toString().match(/[^0-9]/g) === null ? '' : x.toString().match(    /[^0-9]/g).join('');
    let num1 = Number(str2 + str1)|0;   //reverse and transform to 32bit
    let num2 = Number(str2 + str1);
    return num1 === num2 ? num2 : 0;
};

这个题目,主要考察对数据类型NaN的理解和对方法isNaN()的理解,同时考察对Number、parseInt、parseFloat方法的区别。这里简单的声明一下。

NaN

NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数
未返回数值的情况(这样就不会抛出错误了)。任何数值除以0会返回NaN。

NaN与任何值都不相等,包括NaN本身。因此console.log(NaN === NaN) // false

isNaN是用来判断参数是否“不是数值”。

parseInt

parseInt和parseFloat用于将字符串转换为数值类型,而Number用于转换任何数据类型,这里主要介绍一下parseInt。

parseInt会忽略字符串前面的空格,直至找到一个非空格字符。如果第一个字符不是数字字符或者负号或者正号,parseInt会返回NaN。也就是说,用parseInt()转换空字符串会返回NaN(Number()对空字符返回0)如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如,"1234blue"会被转换为1234,因为"blue"会被完全忽略。类似地,"22.5"会被转换为22,因为小数点并不是有效的数字字符;'-123'会被转换为-123,因为第一个字符是负号,而后面的字符都是数字;'-+123'会返回NaN,因为第一个字符是-,而第二个字符却是+,不符合正常的数值模式。

因此,此题的解题思路如下:

var myAtoi = function(str) {
    let symbol = '';
    str = str.replace(/^\s+|\s+$/g, '');//去除两端空格
    str = isNaN(parseInt(str)) ? 0 : parseInt(str);
    if (str > Math.pow(2, 31) - 1) {
        return Math.pow(2, 31) - 1;
    } else if (str < - Math.pow(2, 31)) {
        return - Math.pow(2, 31);
    } else {
        return str;
    }
};

持续更新中...

leetcode刷题(javaScript)——回溯、递归、dfs相关场景题总结 递归通常用于解决可以被分解为相同问题的子问题的情况,通过不断调用自身来解决问题。当涉及到回溯、递归、深度优先搜索(DFS)相关的场景题时,通常可以将它们放在一起综合考虑,因为它们之间有一定的联系和相互影响。以下是一些相关的LeetCode场景题以及解题技 阅读详情

相关推荐

leetcode卡-leetcode-js:JavaScript版算法练习

leetcodeleetcode-js JavaScript版算法练习 目录 简单算法 字符串 计数二进制子串 数组 正则 排序 数据结构 栈 队列 链表 矩阵 二叉树 堆

刷题-【leetcode】-JavaScript笔记

文章目录1. JavaScript v8输入输出1. 案例2.数组2.1创建数组有两种方式2.1.1使用 Array 构造函数:2.1.2使用数组字面量表示法:2.2 常用方法2.2.1 reduce()2.2.1.1 reduce()最简单的用法就是累加和累乘2.2.1.2 reduce()高级用法:数组去重2.2.1.3 reduce()高级用法:将二维数组转化为一维数组2.2.1.4 reduce()高级用法:多维数组转成一维数组 1. JavaScript v8输入输出 1. 案例 描述 请你实现

weixin_40852935的博客 1157

leetcode算法练习 JavaScript实现

leetcode 表格内容由spider.js从leetcode-cn.com爬取。 已做题目答案也从leetcode-cn.com中爬取并生成文件。 解题进度:已解决 134/629&amp;amp;amp;nbsp;-&amp;amp;amp;nbsp;简单&amp;amp;amp;nbsp;92&amp;amp;amp;nbsp;中等&amp;amp;amp;nbsp;36&amp;amp;amp;nbsp;困难&amp;amp;am

liusaint1992的专栏 8565

用Js怒刷LeetCode

文中所有题目均为精心挑选过的超高频题目,所以大家可以收藏起来针对有一定数据结构基础(了解链表, 二叉树, 二叉堆, 递归)的基本概念,并对时间空间复杂度有基本认知的。将文中列出的每道题至少手写3遍面试前可以按照本文整理出来的题目直接过一遍文章更新频率: 除休息日外,每天在题目下方更新一道题的题解LeetCode原题的将贴上原地址,不在文章内做题目描述LeetCode第1题按照题目要求,我们第一时间想到的会是两层循环暴力解法:解法1:Time = O(), Space = O(1)思路:遍历每个元素nu

m0_67615103的博客 1170

leetcode算法题Js实现

leetcode算法题Js实现 1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 var twoSum = function(nums, target) { for(var i=0;i<nums.length-1;i++){ ...

echo750的博客 797

leetcode算法题JavaScript实现)_0

题外话 刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象、String对象等原生方法,构造函数、一些算法题等。每次submit之后,看看自己的代码,再看看别人写的代码。发现自己写的代码和实现实现思路简直弱爆了。于是,每次都会在submi完之后,会看看Top five的答案,理解大牛们的解题思路

逐梦小涛 257

终极LeetCode JavaScript通关宝典:gh_mirrors/leet/leetcode-js项目2000+题解全解析

gh_mirrors/leet/leetcode-js是一个专注于提供2000+道LeetCode算法题JavaScript解决方案的开源项目,它为JavaScript开发者提供了丰富的学习资源,助力开发者轻松攻克LeetCode算法难题,提升编程技能。 ## 🌟项目核心价值:一站式算法学习资源库 对于JavaScript开发者而言,在LeetCode上练习算法时,常常会遇到解题思路不清晰、

gitblog_00941的博客 998

为什么选择gh_mirrors/leet/leetcode-js?JavaScript开发者的算法学习利器

gh_mirrors/leet/leetcode-js是一个专注于提供2000+道LeetCode算法题JavaScript解决方案的开源项目,它为JavaScript开发者提供了系统且全面的算法学习资源,帮助开发者在算法学习的道路上快速提升。 ## 丰富的JavaScript算法题解,覆盖各类知识点 该项目包含了2000多道LeetCode算法题JavaScript实现,涵盖了数组、字符

gitblog_00192的博客 241

有关树遍历的javascript实现【前端-总结-leetcode算法题

有关树遍历的javascript实现前言1、树和二叉树1.1、 树1.1.1 树的基本概念1.1.2 树的深度优先遍历(DFS)1.1.3 树的广度优先遍历(BFS)1.2、二叉树1.2.1 二叉树的基本概念1.2.2 二叉树的先序遍历递归版非递归版1.2.3 二叉树的中序遍历递归版非递归版1.2.4 二叉树的后序遍历递归版非递归版2、 leetcode算法题94、 二叉树的中序遍历102、 二叉树的层序遍历104、二叉树的最大深度111、 二叉树的最小深度112、路径总和3、前端有关遍历JSON的所有值.

金金的博客 367

leetcode-same tree 算法题 --JavaScript实现

1.题目描述: 给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。 判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。 2.上代码: function isSameTree( p , q ) { // write code here if(q===null &&p===null){return true} if(q!==null && p===null){return false} if(q===

qq_42099097的博客 190

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

菜鸡自述 这是学完数据结构后,时隔一年,再次碰算法题,这让我意识到自己的算法问题是相当的薄弱,以后要多练算法题,记此。 题目描述 这是力扣(LeetCode)的一道算法题,点击进入。 给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意:给定数字的范围是 [0, 10*8] 解题思路(非最佳) 将数字从大到小排列,与原数字

weixin_45664402的博客 2426
上一篇: 月薪2500到年薪20+我经历了些什么?
下一篇: 打造史上最强模块加载工具
aabv54321
博客等级 码龄10年 25粉丝 35原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值