使用java,列举所有给定数组中和为定值的组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java,列举所有给定数组中和为定值的组合相关的知识,希望对你有一定的参考价值。

比如给定数组1,2,3,4,5,6 和:7
输出:1,6和2,5和3,4和1,2,4

import java.util.Arrays;

/**
* 列举数组中任意元素和为定值的组合
*/
public class SolveProb
// Arrays.sort(arr);
static int[] flag = new int[100];
static int index = 0;// 记录当前
public SolveProb()

public static void numGroup(int[] arr, int start, int length, int sum)
if (sum == 0)
for (int j = 0; j < index; j++)
System.out.print(flag[j]);

System.out.println();
else
for (int i = start; i < length; i++)
flag[index++] = arr[i];
SolveProb.numGroup(arr, i + 1, length-1, sum - arr[i]);


index--;


public static void main(String[] args)
int[] arr = 1, 3, 2, 4, 5, 6, 7, 8, 9 ;
Arrays.sort(arr);
int sum = 7;
SolveProb.numGroup(arr, 0, arr.length, sum);

参考技术A int[] ArrNum=1,2,3,4,5,6;
for (int i = 0; i < ArrNum.length; i++)
for (int j = 0; j < ArrNum.length; j++)
if(ArrNum[i]+ArrNum[j]==7)

System.out.println(ArrNum[i]+","+ArrNum[j]);


参考技术B #include <iostream>
using namespace std;
void main()

int a[7]=1,2,3,4,5,6,7;
int b[9]=1,6,2,5,3,4,1,2,4;
int i,j;
for (i=0; i<7; i++)
for (j=0; j<9; j++)
if (a[i]==b[j])
a[i]=b[j]=0;
for (i=0; i<7; i++)
if (a[i])
cout << a[i] << "\t";
for (i=0; i<9; i++)
if (b[i])
cout << b[i] << "\t";

和为定值的m个数

和为定值的m个数

np 问题(时间复杂度o(2**n))

 

 

 

code1:

暴力递归

解决 只有正数的情况

 1 class Solution {
 2     private List<List<Integer>> res = new ArrayList<List<Integer>>();
 3     public List<List<Integer>> fourSum(int[] nums, int target) {
 4         boolean[] a = new boolean[nums.length];
 5         for(int i = 0;i <a.length-1;i++)
 6             a[i] = false;
 7         sum(nums,a,0,0,target);
 8         return res;
 9     }
10     private void sum(int[] nums,boolean[] a,int i,int has,int target){
11         if(i>a.length-1) return;
12         if(has + nums[i] == target){
13             a[i] = true;
14             
15             res.add(add_res(nums,a));
16             a[i] = false;
17         }
18         a[i] = true;
19         sum(nums,a,i+1,has+nums[i],target);
20         a[i] = false;
21         sum(nums,a,i+1,has,target);
22     }
23     private List<Integer> add_res (int[] nums,boolean[] a){
24         List<Integer> res = new ArrayList<Integer>();
25         for(int i = 0;i<a.length;i++)
26             if(a[i])
27                 res.add(nums[i]);
28         return res;
29     }
30 }

 

以上是关于使用java,列举所有给定数组中和为定值的组合的主要内容,如果未能解决你的问题,请参考以下文章

编程之法:面试和算法心得(寻找和为定值的多个数)

寻找和为定值的两个数

算法笔记_037:寻找和为定值的两个数(Java)

求数组中和为给定值的所有子序列

求数组中和为给定数的所有组合

和为定值的多个数