gpt4 book ai didi

Scala 如何在 n > 0 时减少

转载 作者:行者123 更新时间:2023-12-01 09:20:36 26 4
gpt4 key购买 nike

我想知道是否有办法以更实用的方式处理 while (n > 0) 循环,我有一个小型 Scala 应用程序,它计算从 1 到 N 范围内等于 K 的位数:例如 30 和 3 将返回 4 [3, 13, 23, 30]

object NumKCount {

def main(args: Array[String]): Unit = {
println(countK(30,3))
}

def countKDigit(n:Int, k:Int):Int = {
var num = n
var count = 0
while (num > 10) {
val digit = num % 10
if (digit == k) {count += 1}
num = num / 10
}
if (num == k) {count += 1}
count
}

def countK(n:Int, k:Int):Int = {
1.to(n).foldLeft(0)((acc, x) => acc + countKDigit(x, k))
}
}

我正在寻找一种使用纯函数方法定义函数 countKDigit 的方法

最佳答案

首先将数字n展开成数字序列

def digits(n: Int): Seq[Int] = {
if (n < 10) Seq(n)
else digits(n / 10) :+ n % 10
}

然后通过计算 k

的出现次数来减少序列
def countKDigit(n:Int, k:Int):Int = {
digits(n).count(_ == k)
}

或者你可以通过使用 flatMap 完全避免 countKDigit

def countK(n:Int, k:Int):Int = {
1.to(n).flatMap(digits).count(_ == k)
}

关于Scala 如何在 n > 0 时减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com