我有这个代码,它是不重复的组合公式:
combinaciones :: Int ->[Int]->[[Int]]
combinaciones 0 _ = [[]]
combinaciones _ [] = []
combinaciones k (x:xs) = [x:ys | ys <- combinaciones (k - 1) xs] ++ combinaciones k xs
combinationsN :: Int ->Int->[[Int]]
combinationsN n k = combinaciones k [1..n]
我的问题是我希望返回一个列表列表,列表中包含列表数量,一对:([[Int]],Int)。我怎么能这样做?
答案 0 :(得分:1)
这是一个简单的版本 - 可能通过计算可以更有效地完成它,但这是我在凌晨1点可以提出的。
combinationsWithCount :: Int -> [Int] -> ([[Int]], Int)
combinationsWithCount n xs = let cs = combinaciones n xs
in (cs, length cs)
编辑:好的,让我尝试编写智能版本。
combinaciones :: Int -> [Int] -> ([[Int]], Int)
combinaciones 0 _ = ([[]], 1)
combinaciones _ [] = ([], 0)
combinaciones k (x:xs) =
let (first, firstN) = combinaciones (k - 1) xs
(second, secondN) = combinaciones k xs
in ([x:ys | ys <- first] ++ second, firstN + secondN)
绝对不能保证这是正确的,我睡着了。 ; - )