题目描述
考虑数字序列{1, 3, 4, 2,6,7,5,5,8,10,9,10,7,17},任取其中几个数字相加,使得到的和为29,则不同的组合有几种?
(说明:比如其中的第2,第3,第7,第14个数的组合和第2,第3,第13,第14个数的组合看起来是一样的,都是3,4,5,17,那么这里只视其为一种)
思路
排序,去重。
把数据末尾不合理的数据排除:建指针指向数组头尾,计算头尾节点的数据和并与sum作比较。
大于sum,尾指针前一一位。(如果题目允许单独一个元素等于sum,那么就要),
小于sum,头指针后移一位继续比较,如果又是大于sum,则可以排除头指针的前一个元素,尾指针前移,否则弹出。
最后使用回溯法。
C代码实现