LintCode 90 [k Sum II]

原题

给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。    
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。

样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4], [2,3]]

解题思路

  • 由于k Sum是求个数,所以考虑动态规划,直接DFS会超时。而k Sum II 是求所有具体的解,所以直接DFS.
  • 思路跟 subsets 类似,可以想象成求一些特殊的subsets,加入result时,要符合subset的和等于target
  • 本题与 Combination Sum II 也非常类似

完整代码

class Solution:
    """
    @param A: An integer array.
    @param k: A positive integer (k <= length(A))
    @param target: Integer
    @return a list of lists of integer 
    """
    res = []
    def kSumII(self, A, k, target):
        # write your code here
        if A == None:
            return []
        self.dfs(sorted(A), k, 0, [], target)
        return self.res
        
    def dfs(self, nums, k, index, path, target):
        if target == 0 and k == 0:
            self.res.append(path[:])
            return None
        if len(nums) == index or k < 0 or target < 0:
            return None
        for i in range(index, len(nums)):
            self.dfs(nums, k - 1, i+1, path + [nums[i]], target - nums[i])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,789评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,984评论 2 36
  • 326. Power of Three Given an integer, write a function to...
    跑者小越阅读 2,166评论 0 1
  • 套路很深,就是遍历全部情况 定义解空间,包含全部解 利用深度优先搜索解空间 Trial,减枝。(避免访问不可能产生...
    superlj666阅读 506评论 0 0
  • 摘自《提问的威力》 当我们问对方“为什么”的时候,容易给人 造成抵触情绪,因为这会让对方感觉我们是 在质疑他做事的...
    高高_4dae阅读 233评论 0 0