【js】leetcode双指针(二):680回文字符串、88归并两个有序数组题解

7 篇文章 0 订阅
3 篇文章 0 订阅

一、前言

还是跟着大佬:https://github.com/CyC2018/CS-Notes leetcode题解顺序来刷的,本篇文章两个题目的主要原理依然是双指针。

二、具体题目

680. 回文字符串

var validPalindrome = function(s) {
    let a = 0, b = s.length - 1;
    while(a<b){
        if(s[a] != s[b]){
            if(judgePalindrome(s,a+1,b) == true||judgePalindrome(s,a,b-1) == true){
                return true;
            }
            else{
                return false
            }
        }
        else{
            a++;
            b--;
        } 
    }
    return true
};

var judgePalindrome = (s,a,b)=>{
    while(a<b){
        if(s[a] != s[b]) return false;
        else{
            a++;
            b--;
        }
    }
    return true
}

本题同时也需要用到非常典型的递归思想,这里也顺便整理一下递归的相关知识点。

什么是方法递归?

所谓的方法递归,就是在一个方法(函数)执行的内部,自己调用了自己的过程,称之为 “递归” 。

递归分为两个子过程:

递过程:函数不断地调用自身,直到走到函数的终止条件,第一阶段结束。
归过程:函数不断地返回的过程。

例如,我们求 N! 起始条件:N = 1 的时候,N! 为 1。这个起始条件相当于递归的结束条件。递归公式:求 N!,
直接不好求,可以把问题转换成 N! => N * (N-1)!

(以上内容摘自https://blog.csdn.net/qq_43575801/article/details/124029190)

递归解题三部曲

我们需要关心的主要是以下三点:

  • 整个递归的终止条件。
  • 一级递归需要做什么?
  • 应该返回给上一级的返回值是什么?

因此,也就有了我们解递归题的三部曲:

找整个递归的终止条件:递归应该在什么时候结束? 找返回值:应该给上一级返回什么信息? 本级递归应该做什么:在这一级递归中,应该完成什么任务?

(以上内容摘自https://blog.csdn.net/zwqjoy/article/details/116520425)

88. 归并两个有序数组

本题最值得注意的是:

需要从尾开始遍历,否则在 nums1上归并得到的值会覆盖还未进行归并比较的值。

举个例子,nums1为[1,1,2],nums2为[1,2],如果从头开始遍历,将nums2中的1会覆盖掉nums1中还未进行比较的2。

var merge = function(nums1, m, nums2, n) {
    var i = m - 1;
    var j = n - 1;
    var k = m + n - 1;

    while (i >= 0 || j >= 0){
        if(i<0){
            nums1[k--]=nums2[j--]
        }
        else if(j<0){
            nums1[k--]=nums1[i--]
        }
        else if(nums1[i]<nums2[j]){
            nums1[k--]=nums2[j--]
        }
        else{
            nums1[k--]=nums1[i--]
        }
    }
    return nums1
};

这道题我想要补充一下关于前置递增(递减)和后置递增(递减)的知识点:

1.前置递增(++): 在变量的前面,先自身执行加法操作后在赋值(++i);

2.后置递增(++): 在变量的后面,先赋值后在执行加法操作(i++);

3.前置递减(–): 在变量的前面,先自身执行减法操作后在赋值(–i);

4.后置递减(–): 在变量的前面,先赋值后在执行减法操作(i–);

本题用到了后置递减,即先将nums1[i]或nums2[j]赋值给nums1[k],变量再进行自减。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TeresaPeng_zju

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值