微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

谁能解释为什么我在这个leetcode问题上得到未定义的输出?

如何解决谁能解释为什么我在这个leetcode问题上得到未定义的输出?

再次返回并出现另一个leetcode问题。我无法获取函数或每个循环的返回值,但是这样做仍然显示为未定义

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
   
  let  opposingParens = {
    "(" : ")","[" : "]","{" : "}"
  }
  let splitChars = s.split('');
   
  let isTruthy = false
  let opposingParensFunc = (paren) => {
      
    if(splitChars[1] == opposingParens[paren] || splitChars[splitChars.length -1] == opposingParens[paren]) {
      isTruthy = true
    }
    return isTruthy
  }
   
       
  splitChars.forEach((char,i) => {
    return opposingParensFunc(char)
  })
};
  1. 您的输入“()”
  2. 未定义输出
  3. 预期为真

谢谢您的帮助。

解决方法

var isValid = function(s) {

let  opposingParens = {
    "(" : ")","[" : "]","{" : "}"
}
let  splitChars = s.split('');

let isTruthy = false
let opposingParensFunc = (paren) => {
  
   if(splitChars[1] === opposingParens[paren] || splitChars[splitChars.length -1] === opposingParens[paren]  ){
    isTruthy = true
}
   return isTruthy
}
splitChars.forEach((char,i) =>{
    console.log(opposingParensFunc(char))
})  
};
isValid("()")

就像评论中前面提到的,forEach()返回undefined,并且预期的答案是2,因为forEach()运行了两次。

,

您的函数没有return语句。您确实拥有的一个功能是为另一个函数提供返回值:您提供给forEach的函数。但这并不能确定主函数的返回值。看来您想在任何回调函数的外部外部执行以下操作:

return isThruthy;

注意:在forEach回调中提供返回值是没有用的,该值永远不会被它使用。

但是,您的算法在一般情况下将不起作用,因为您总是将一个字符与索引1的字符以及输入中的最后一个字符进行比较。但是请注意,平衡右括号可以在输入中的任何位置。想想“([]] {}”。

您真正需要的是堆栈。当您找到一个开括号,但它的关闭配对部分在堆栈上时,表示您希望在此开括号的 right 某处找到什么。如果还有另一个开括号,则应先将其关闭,因此我们还将相应的闭括号推入堆栈,...等。

找到右方括号时,可将其与堆栈顶部的方括号进行比较。如果它们不同,则输入无效。如果相等,则有一个平衡对,并且可以从堆栈中弹出该信息,等等。

到达输入的末尾时,还必须确保不再有期望的右括号。换句话说,那时堆栈应该是空的。

这是一个实现:

let brackets = {
    "(": ")","[": "]","{": "}",};

var isValid = function(s) {
    let stack = [];
    for (let i = 0; i < s.length; i++) {
        let ch = s[i];
        let open = brackets[ch];
        if (open) stack.push(open);
        else if (ch !== stack.pop()) return false;
    }
    return !stack.length; // true when stack is empty,false otherwise
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。