javascript算法题-入门1

97 阅读2分钟

[415. 字符串相加](415. 字符串相加 - 力扣(LeetCode))

image.png

### 得到数字如何转换为字符串? `String(s)`

数组转化为字符串

arr.join('') image.png

空值合并运算符

image.png image.png

字符串->数字

image.png

题解

image.png

参考题解:leetcode.cn/problems/ad…

得到数组/字符串长度

// let len1 = text1.size(); //C++
// let len2 = text2.size();
const len1 = text1.length, len2 = text2.length;

[165. 比较版本号](165. 比较版本号 - 力扣(LeetCode))

image.png

let s ="1.001"
let a = s.split('.')
console.log(a); // [ '1', '001' ]
console.log(a[1]); // 001
console.log(+a[1]); // 1

image.png

题解

/**
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function(version1, version2) {
    let arr1 = version1.split('.') , arr2 = version2.split('.') , i = 0 , j = 0
    while(i < arr1.length || j < arr2.length){
        let index1 = +(arr1[i] ?? 0 ), index2 = +(arr2[j] ?? 0)
        if(index1 < index2){
            return -1
        }else if(index1 > index2){
            return 1
        }else{
            i++
            j++
        }
    }
    return 0
};

704. 二分查找

<< >>

image.png

// mid = (l + r)/2 //小数
mid = (l + r) >> 1; //整数

image.png

const dp = Array(amount + 1).fill(1 << 30);

题解

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let l = 0 , r = nums.length - 1 , mid , midNum
    while(l <= r){ //数组长度为1时,需要取等号
        // mid = (l+r)/2
        mid = (l + r) >> 1;
        midNum = nums[mid]
        if(midNum < target) l = mid+1
        else if(midNum > target) r = mid-1
        else return mid
    }
    return -1 
};

88. 合并两个有序数组

数组sort排序方法

numbers.sort(); // 默认排序(按照字符串Unicode码点排序)
numbers.sort((a, b) => a - b); // 按照数字大小排序

本地运行没有问题,但是力扣上编译器过不了的题解

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    let i = 0 , j = 0 ;
    let temp = []
    while(i < m && j < n){
        if(nums1[i] <= nums2[j]){
            temp.push(nums1[i]);
            i++;
        }else if(nums1[i] > nums2[j]){
            temp.push(nums2[j]);
            j++;
        }
    }
    //长度有剩余的情况
    while(i < m){
        temp.push(nums1[i])
        i++;
    }
    while(j < n){
        temp.push(nums2[j])
        j++;
    }
    nums1 = temp.slice()
};

image.png

题解

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
   for(let i = 0 ; i < n ; i ++){
    nums1[i+m] = nums2[i]
   }
   nums1.sort((a, b) => a - b); 
};

20. 有效的括号

image.png

 const map = {
        ')':'(',
        '}':'{',
        ']':'['
    }

题解 - 栈

leetcode.cn/problems/va…