输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。
输入描述: 每个测试输入包含2个整数,n和m。
输出描述: 按每个组合的字典序排列输出,每行输出一种组合。
示例1:
输入: 5 5输出: 1 4 2 3 5基于递归实现 dfs(深度优先搜索) 即可. 这是一个比较典型的背包问题。
假设问题的解为F(n, m),可分解为两个子问题F(n-1, m-n)和F(n-1, m),对这两个问题递归求解。
求解过程中,如果找到了符合条件的数字组合,则打印出来 例如 1, 2, 3, 4, 5, 求有多少种组合的和为 5 。 对于 1 这个元素来说, 可能会放到结果中, 可能不放到结果中。
如果放到结果中, 就相当于求 2...5 中取若干个数字和为 4. (即为F(n-1, m-n))如果不放到结果中, 就相当于求 2...5 中取若干个数字和为 5. (即为F(n-1, m))链接:https://www.nowcoder.com/questionTerminal/11cc498832db489786f8a03c3b67d02c
