You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell技术问题:如何实现找出和为n的无重复整数元组?

解决Haskell tuplesum函数的重复元组问题

嘿,我懂你的困扰——你的列表推导式会遍历原列表里的每一对元素,原列表中重复的5会被反复组合,自然就输出了多个一模一样的(5,5)。咱们可以通过简单调整来搞定这个问题:

方法1:先对输入列表去重

最直接的思路是先把输入列表里的重复元素清理掉,让相同元素只被处理一次。我们可以用Data.List模块里的nub函数实现这一点:

import Data.List (nub)

tuplesum :: (Eq b, Num b, Ord b) => [b] -> b -> [(b, b)]
tuplesum xs n = [(x1, x2) | x1 <- uniqueXs, x2 <- uniqueXs, x1 + x2 == n, x1 <= x2]
  where uniqueXs = nub xs

测试效果

当你输入tuplesum [5,1,4,0,5,6,9] 10时,输出会变成:

[(1,9),(4,6),(5,5)]

完美消除了重复的元组!

为什么这个方法管用?

nub会遍历列表并保留每个元素的第一次出现,后续重复的元素都会被丢弃。原列表里的多个5被压缩成一个后,列表推导式只会生成一次(5,5),而不是四次。

额外说明

如果你的场景需要保留原列表元素的出现次数,但只是不想重复输出相同元组(比如哪怕有多个5,也只显示一次(5,5)),这个方案依然适用。要是有更复杂的需求(比如统计符合条件的元组实际出现次数),咱们可以再调整逻辑,但当前方案完全匹配你描述的需求。

内容的提问来源于stack exchange,提问作者derpnallday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:56:45