我们一起写算法05

平时有空的时候解一篇算法题目,(LeetCode提供了一千多道算法题目)不仅可以提高逻辑思维能力,也可以巩固JavaScript基础知识。统一到算法题目可以使用多种语言求解,解法思路是相同的,我们是学习前端的,所以这里只写javascript的解法。

1.两数之和

  1. 题目描述

    /*
    给定一个整数数组 nums 和一个目标值 target,
    请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
    
    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
    
    示例:
    
    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    
     */
    
  2. 答案与解析

    思路分析:

    在给出的数组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))
    

    测试结果:

    题目1测试结果

2.回文数字

  1. 题目描述

    /*
    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
    
    示例 1:
    输入: 121
    输出: true
    
    示例 2:
    输入: -121
    输出: false
    解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    
    示例 3:
    输入: 10
    输出: false
    解释: 从右向左读, 为 01 。因此它不是一个回文数。
    */
    
  2. 答案与解析

    思路解析:

    回文数字是正着读和倒着读都一样的数字,回文字符串同样,字符串的第一个字符和最后一个字符相同,第二个字符与倒数第二个字符(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个方法测试结果:

    题目2测试结果

像风走800里,不问归期

发布了111 篇原创文章 · 获赞 120 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/w1418899532/article/details/94895629