/*
题目:
给定一个target,和一个"有序"数组ra。
要求:
从ra中挑选length2个数,使得它们之和等于target;
说明:
length2个数中可以出现重复
例子:
如 a+b+c = 31,a/b/c都来自于[1,3,5,7,9,11,13,15]。
则
*/
#include<iostream>
#include<vector>
#include<ctime>
using namespace std;
void findCorrectNumbers(int target, int* ra, int length, std::vector<int> result ,int hasCheckedPosition,int length2)
{
if (hasCheckedPosition>=0)
{
//1.从后往前找到小于target的第一个数
int one = ra[hasCheckedPosition];
//2-1.如果之前累加的值加上这个值依然小于target,考察这个值(分为两种情况)
if (one < target && result.size()<length2 )
{
result.push_back(one);
//情况1:保留了one,所以剩下的数只要和能够达到target-one就可以了
findCorrectNumbers(target - one, ra, length, result, hasCheckedPosition, length2);
if (result.
【练习题】25.找出N个数之和等于M
最新推荐文章于 2022-05-21 20:18:01 发布
本文介绍了一种使用回溯法解决找出给定有序数组中若干数之和等于目标值的问题。通过递归实现,展示了如何在数组中寻找合适组合,并对比了回溯法与暴力遍历的时间效率。
摘要由CSDN通过智能技术生成