加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

创建一个scala函数,生成长度为N的整数的有序列表

发布时间:2020-12-16 09:53:57 所属栏目:安全 来源:网络整理
导读:假设我有一个简单的函数,它构建了两个正整数(x,y)的所有列表的迭代器,这些正整数是 1000并且x = y def twoIntsIterator(): Iterator[List[Int]] = { for { x - Iterator.range(1,1000) y - Iterator.range(x,1000) } yield List(x,y)} 你将如何实现一个函数i
假设我有一个简单的函数,它构建了两个正整数(x,y)的所有列表的迭代器,这些正整数是< 1000并且x< = y

def twoIntsIterator(): Iterator[List[Int]] = {
  for {
    x <- Iterator.range(1,1000)
    y <- Iterator.range(x,1000)
  } yield List(x,y)
}

你将如何实现一个函数intsListIterator(n:Int,limit:Int),它将列表创建扩展到可变长度列表?对于n = 2和limit = 1000,这样的函数将产生与上述相同的输出.如果使用n = 3和limit = 4调用它将返回产生以下内容的迭代器:

List(1,1,1)
List(1,2)
List(1,3)
List(1,2,3,3)
List(2,2)
List(2,3)
List(3,3)

N.B.:我使用了迭代器,但它们可能是视图,重点是变量列表长度

解决方法

只需使用递归:

def produce(n: Int,limit: Int,k: Int = 1): Iterator[List[Int]] = {
  Iterator.range(k,limit) flatMap {
    case x if n > 1 => produce(n - 1,limit,x).map(x :: _)
    case x => Iterator(List(x))
  }
}

或者为了理解:

def produce(n: Int,k: Int = 1): Iterator[List[Int]] = for {
   x <- k to limit - 1 iterator;
   y <- if (n > 1) produce(n - 1,x) else Iterator(Nil)
} yield x :: y

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读