列出方案中数字的分区

时间:2012-04-23 08:02:19

标签: list scheme data-partitioning

我需要在列表中表示数字的分区。该过程还接受确定分区的最大数量和初始分区的最大值的参数。

(list-partitions 5 2 4)
>((4 1) (3 2))

此处初始总数为5,最大分区数为2,最大初始分区为4。

从概念上讲,我认为我应该将分区数字提供给一个帮助函数,为我构建分区。但是我该如何实现呢?

解决了

1 个答案:

答案 0 :(得分:2)

这是Racket的可能解决方案。首先,partition过程(基于this算法)生成整数n的完整分区列表。然后list-partitions过程按要求过滤结果:

#lang racket

(define (partition n)
  (let loop ((n n)
             (acc '()))
    (if (zero? n)
        (list acc)
        (append-map (lambda (i)
                      (loop (- n i) (cons i acc)))
                    (reverse (build-list n add1))))))

(define (list-partitions n max-number max-init)
  (take (filter (lambda (lst)
                  (<= (apply max lst) max-init))
                (partition n))
        max-number))

(list-partitions 5 2 4)
> '((1 4) (2 3))