平时有空的时候解一篇算法题目,(LeetCode提供了一千多道算法题目)不仅可以提高逻辑思维能力,也可以巩固JavaScript基础知识。统一到算法题目可以使用多种语言求解,解法思路是相同的,我们是学习前端的,所以这里只写javascript的解法。
1.两数之和
-
题目描述
/* 给定一个整数数组 nums 和一个目标值 target, 请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] */
-
答案与解析
思路分析:
在给出的数组num中找出和为目标值得两个数的下标。重要思想仍然是数组元素的遍历。
首先循环读取数组中数字num[i],再次遍历数组元素,依次为num[j],使得num[i]+num[j]
==
target,即在num[i]==
target-num[j]时,返回元素下标i和j(返回的是元素为i和j的数组)。解题代码如下:
function twosum(nums,target){ for(let i=0; i<nums.length; i++){ for(let j=1; j<nums.length;j++){ if (nums[i]===target-nums[j]) { return [i,j] } } } } console.log(twosum([2,7,11,15],9))
测试结果:
2.回文数字
-
题目描述
/* 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 */
-
答案与解析
思路解析:
回文数字是正着读和倒着读都一样的数字,回文字符串同样,字符串的第一个字符和最后一个字符相同,第二个字符与倒数第二个字符(
length-1-i位
)相同,依次类推。方法1
循环读取数组,将数组元素按倒序依次赋值给一个临时变量,然后判断对应正序的元素与临时变量是否相等,如果不相等则不是回文数,如果都相等,说明是回文。
首先使用String对象将整数数组转为字符串,然后使用split方法将字符串转化成字符串数组。
split()
方法用于把一个字符串分割成字符串数组。语法:
stringObject.split(separator,howmany)
代码如下:
function palindrome(num){ var arr= String(num).split('') for(let i=0;i<arr.length;i++){ const temp = arr[arr.length-1-i] if(temp!==arr[i]){ return false } } return true } //调用函数 console.log(palindrome(101030101))
方法2
此方法时对方法1的优化,取数组元素一半长度,可以减少比较次数。代码如下:
function palindrome2(num){ const arr = String(num).split('') for(let i=0;i<arr.length/2;i++){ if(arr[i]!==arr[arr.length-i-1]){ return false } } return true } // 调用函数 console.log(palindrome2(101030101))
方法3
此方法是最简洁的,使用javascript的方法,先使用split将数组元素分割,再使用reverse方法颠倒数组元素,最后使用join方法将数组元素组合成字符串。然后判断组合成的新字符串与原字符串是否相等。实现函数只需要一行代码。为便于理解,这里分成了两行。
法名 用法 语法 reverse() 用于颠倒数组中元素的顺序 arrayObject.reverse() join() 用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的(可不分割)。 arrayObject.join(separator) split() 用于把一个字符串分割成字符串数组 stringObject.split(separator,howmany) 如下:
function palindrome3(num){ const arr = String(num).split('') return String(num) == arr.reverse().join('') } console.log(palindrome3(101030101))
上述3个方法测试结果: