小米OJ 12. 找出可能的合的组合

利用dfs解决,从给出的数组左边或右边开始遍历,对每一个数字进行判断,有三种情况:

1. 加上当前数字的值,遍历下一个数字

2. 加上当前数字的值,继续遍历该数字

3. 不加上当前的数字的值,遍历下一个数字

约束条件为:

超出数组等

var sum = 0;
var nums;

function solution(line) {
    var str = line.split(" ");
    nums = str[0].split(",");
    var num = parseInt(str[1]);
    dfs(num, nums.length - 1);
    return sum + "";
}

function dfs(target, curNum) {
    if (target < 0 || curNum < 0) {
        return;
    }
    if (target === 0) {
        sum++;
        return;
    }
    dfs(target - nums[curNum], curNum - 1);
    dfs(target - nums[curNum], curNum);
    dfs(target, curNum - 1);
}

原文地址:https://www.cnblogs.com/ruoh3kou/p/10316590.html

时间: 2024-10-05 03:10:07

小米OJ 12. 找出可能的合的组合的相关文章

【小米oj】 找出旋转有序数列的中间值

1 #define mm(a) memset(a,0,sizeof(a)); 2 #define max(x,y) (x)>(y)?(x):(y) 3 #define min(x,y) (x)<(y)?(x):(y) 4 #define Fopen freopen("1.in","r",stdin); freopen("m.out","w",stdout); 5 #define rep(i,a,b) for(int

【小米oj】 找出单独出现的数字

1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int n,x; 6 map<int,int>mp; 7 int main() 8 { 9 while(~scanf("%d",&x)){ 10 mp[x]++; 11 } 12 for(auto i:mp){ 13 if(i.second==1)printf("%d\n",i.first); 14 } 15 return

小米OJ 2. 找出单独出现的数字

解法一: map 1.45 ms #include <algorithm> #include <bitset> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <list> #include <map> #include <queue>

【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的.它的一个非常方便的most_common()方法直接告诉你答案. # Determine the most common words in a list words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 'the', 'eyes', 'the', 'eyes', 'the', '

九度OJ 1035找出直系亲属

题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-. 输入:     输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50)

Leetcode39---&gt;Combination Sum(在数组中找出和为target的组合)

题目: 给定一个数组candidates和一个目标值target,求出数组中相加结果为target的数字组合: 举例: For example, given candidate set [2, 3, 6, 7] and target 7, A solution set is: [[7],[2, 2, 3]] 从举例中可以看出,同一个数字可以使用多次,且结果是唯一的: 解题思路: 我个人感觉该题目一点也不难,其实也是一个递归的过程,当达到递归条件时,就将结果加入结果集: 首先题目没说给的数组有啥特

华为OJ:找出字符串中第一个只出现一次的字符

可以稍微让代码写的好看,不用直接写双循环的话,就可以写成函数的调用,重用性也很高. import java.util.Scanner; public class findOnlyOnceChar { public static boolean FindChar(String pInputString, char pChar){ int count=0; for(int i=0;i<pInputString.length();i++){ if(pInputString.charAt(i)==pCh

九度oj 题目1256:找出两个只出现了一次的数字

题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的第一行包括一个整数N(1<=N<=1000). 接下来的一行包括N个整数. 输出: 可能有多组测试数据,对于每组数据, 找出这个数组中的两个只出现了一次的数字. 输出的数字的顺序为从小到大. 样例输入: 6 2 3 9 3 7 2 样例输出: 7 9 (题目中的条件 N 应该大于1)开始的想法是先排序,然后再去数数,代码如下 1 #include <cstdio>

Entity Framework 6 Recipes 2nd Edition(9-3)译-&gt;找出Web API中发生了什么变化

9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Frist实现数据访问管理. 本例,我们模拟一个N层场景,用单独的客户端(控制台应用)来调用单独的基于REST服务的Web网站(WEB API应用) . 注意:每层使用单独的Visual Studio 解决方案, 这样更方便配置.调试和模拟一个N层应用. 假设有一个如Figure 9-3所示的旅行社和预订