首页 > 解决方案 > 在 Scala 中寻找“整齐的数字”

问题描述

一个整齐的数字是一个数字按非递减顺序排列的数字,例如 1234。这是一种用 Ruby 编写的查找整齐数字的方法:

def tidy_number(n)
  n.to_s.chars.sort.join.to_i == n
end

p tidy_number(12345678)     # true
p tidy_number(12345878)     # false

我试图在 Scala 中写同样的东西,结果如下:

object MyClass {
def tidy_number(n:Int) = n.toString.toList.sorted.mkString.toInt == n;

    def main(args: Array[String]) {
      println(tidy_number(12345678))        // true
      println(tidy_number(12345878))        // false
    }
}

我可以在 Scala 中做到这一点的唯一方法是将整数转换为字符串到列表,然后对列表进行排序并再次返回。我的问题:有没有更好的方法?从某种意义上说,“更好”的转化次数更少。我主要是在寻找一个简洁的 Scala,但如果有人指出在 Ruby 中更简洁的方法,我将不胜感激。

标签: rubyscalainteger

解决方案


您可以sorted在 Scala 中使用字符串,所以

def tidy_number(n: Int) = {
  val s = n.toString
  s == s.sorted
}

分两部分进行还可以避免额外的 toInt 转换。

我从未使用过 ruby​​,但这篇文章表明你正在做最好的方式


推荐阅读