js leetcode

用js做leetcode的时候用到了递归调用,但是出现了Maximum call stack size exceded

这个栈溢出跟js的默认传参有关系,在这里做一点记录。代码如下,这个时用暴力法直接做正则匹配的题

var match = function(s,p,ss,pp){
  if(pp === p.length){  //笔记模式串
      return ss === s.length;
  }
  //p不是*时直接匹配
  if(p[pp+1] != '*'){
      if(s[ss]!=p[pp] && p[pp]!='.'){
          return false;
      }else{
          return match(s,p,ss+1,pp+1);
      }
  }
  //p[pp+1] = '*' ,如果pp+2后面的可以匹配ss那么成功,否则循环ss++,知道不匹配
  while(ss < s.length && (p[pp] == '.' || s[ss] == p[pp])){
      if(match(s,p,ss,pp+2)){
          return true;
      }
      ss++;
  }
  //上面的不匹配时pp跳过*
  return mathc(s,p,ss,pp+2)
};
我在运行时直接调用了match(s,p),出现了上面报的错误,需要多写一个函数,比较js没有指针,只能多加参数表示值的位置:

var isMatch = function(s, p) {
    return match(s,p,0,0);
};
这里要说一下的是,如果直接调用match(s,p),本来传四个参数的,只传入了两个,后面两个会时undefined,而undefined在函数里面做运算的时候会时NaN,这样造成的无限递归,导致栈溢出

你可能感兴趣的:(js工作笔记)