如何解决谁能解释为什么我在这个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)
})
};
- 您的输入“()”
- 未定义输出
- 预期为真
谢谢您的帮助。
解决方法
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 举报,一经查实,本站将立刻删除。