问题陈述:
加里(Gary)是一个狂热的徒步旅行者。他精心跟踪自己的远足,并密切注意 注意地形等小细节。在他的最后一次远足中,他 采取了确切步骤。对于他采取的每一个步骤,他都指出这是否是 上坡或下坡。加里的远足在海上开始和结束 高度和每一步的上升或下降代表高度的单位变化。 我们定义以下术语:
一座山是一系列海拔连续的步骤, 从海平面上升开始,直到下降至 海平面。山谷是海底连续台阶的序列 水平,从海平面下降开始,以台阶结束 直到海平面。考虑到加里(Gary)在上任期间的上下动作顺序 上一次远足时,找到并打印出他所走过的山谷数。
例如,如果加里的路径是,他首先进入一个深谷单位。 然后,他爬上一个高高的山脉。最后,他 回到海平面并结束远足。
功能说明
在下面的编辑器中完成
countingValleys
函数。它必须 返回一个整数,该整数表示加里所遍历的谷数。
countingValleys
具有以下参数:
n
:加里采取的步骤数s
:描述他的路径的字符串输入格式
第一行包含一个整数,即Gary的步数 远足。第二行包含一个字符串,其中包含 描述他的路。
输出格式
打印一个整数,表示整数 加里在徒步旅行时穿过了山谷。
在这里访问问题:
我的解决方案是这样的:
def countingValleys(n: Int, s: String): Int = {
def rec(path: List[Char], counter: Int, valleys: Int): Int = {
path match {
case Nil => valleys
case x::xs if (x == 'U') && ((counter + 1) == 0) =>
rec(xs, counter+1, valleys+1 )
case x::xs if x == 'U' => rec(xs, counter +1, valleys)
case x::xs if x == 'D' => rec(xs, counter -1, valleys)
}
}
rec(s.toList, 0, 0)
}
样本输入:
8
UDDDUDUU
样本输出:
1