有什么更好的方法可以更实用地解决后续运动?

时间:2019-07-14 17:01:37

标签: scala functional-programming immutability tail-recursion immutable-collections

问题陈述:

  

加里(Gary)是一个狂热的徒步旅行者。他精心跟踪自己的远足,并密切注意   注意地形等小细节。在他的最后一次远足中,他   采取了确切步骤。对于他采取的每一个步骤,他都指出这是否是   上坡或下坡。加里的远足在海上开始和结束   高度和每一步的上升或下降代表高度的单位变化。   我们定义以下术语:

     

一座山是一系列海拔连续的步骤,   从海平面上升开始,直到下降至   海平面。山谷是海底连续台阶的序列   水平,从海平面下降开始,以台阶结束   直到海平面。考虑到加里(Gary)在上任期间的上下动作顺序   上一次远足时,找到并打印出他所走过的山谷数。

     

例如,如果加里的路径是,他首先进入一个深谷单位。   然后,他爬上一个高高的山脉。最后,他   回到海平面并结束远足。

     

功能说明

     

在下面的编辑器中完成countingValleys函数。它必须   返回一个整数,该整数表示加里所遍历的谷数。

     

countingValleys具有以下参数:

     
      
  • n:加里采取的步骤数
  •   
  • s:描述他的路径的字符串
  •   
     

输入格式

     

第一行包含一个整数,即Gary的步数   远足。第二行包含一个字符串,其中包含   描述他的路。

     

输出格式

     

打印一个整数,表示整数   加里在徒步旅行时穿过了山谷。

在这里访问问题:

https://www.hackerrank.com/challenges/counting-valleys/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup

我的解决方案是这样的:

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

0 个答案:

没有答案
相关问题