Scala中的括号平衡
我的问题是:我不明白代码是如何工作的。Scala中的括号平衡,scala,Scala,我的问题是:我不明白代码是如何工作的。 “())(“如何返回false def balance(chars: List[Char], numOpens: Int): Boolean = { if (chars.isEmpty) { numOpens == 0 } else { val h = chars.head val n = if (h == '(') numOpens + 1 else if (h == ')') numOpens -
“())(“
如何返回false
def balance(chars: List[Char], numOpens: Int): Boolean = {
if (chars.isEmpty) {
numOpens == 0
} else {
val h = chars.head
val n =
if (h == '(') numOpens + 1
else if (h == ')') numOpens - 1
else numOpens
if (n >= 0) balance(chars.tail, n)
else false
}
}
台词:
if (n >= 0) balance(chars.tail, n)
else false
这意味着,如果在任何一点上存在任何不平衡的)
字符,将立即返回false
(n将<0)。对于您给出的特定示例:())(
我们可以了解函数通过字符串工作时n值的变化:
- 第一个字符-
:n->1,使用剩余字符继续检查:(
)(
- 第二个字符-
:n->0,使用剩余字符继续检查:)
)(
- 第三个字符-
:n->-1,)
已触发-立即返回其他
。第四个字符永远不会被选中假
- 的说法是正确的,但我希望您会发现这一点更具说明性:
让我们想象一下,我们在无限楼梯的最上面的楼梯上。还有一条指令:
(
表示下一步
(↓代码>),)
表示向上提升(↑代码>),您应该忽略所有其他说明
val n =
if (h == '(') numOpens + 1 // step down
else if (h == ')') numOpens - 1 // step up
else numOpens // ignore
走完最后一步,我们必须站在最上面的楼梯上。否则指令无效
if (chars.isEmpty) {
numOpens == 0
} else { ... }
if (n >= 0) ...
else false // there is no stairs upper than the upper one (0)
您不能从最上面的楼梯向上走,否则说明无效
if (chars.isEmpty) {
numOpens == 0
} else { ... }
if (n >= 0) ...
else false // there is no stairs upper than the upper one (0)
例如:
(
表示↓↑↑↓代码>。在此部分之后↓↑代码>您将在最上面的楼梯上,因此在下一个命令(↑代码>)(n<0
),因此该指令无效
if (chars.isEmpty) {
numOpens == 0
} else { ... }
if (n >= 0) ...
else false // there is no stairs upper than the upper one (0)