有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?
2011-07-15 17:28
405 查看
思路:求出所有可能的组合, 判断每个组合相加的值是否等于M;计数组长度为N,则每一种组合相当于一个长度为N的二进制串:串中每一位表示对应整数是否在此组合中,1表示在,0表示不在;如 01101...表示这个组合不包含数组的 0和3,但包含 1,2,4.
class Test
{
static void Main(string[] args)
{
int[] a = { 0, 1, -1, 3, 5, 9, 1, 2, 4, 7 };
int m = 6;
int tempVal = 0;
var tempRet = new List<int>();
for (int i = 0; i < (1 << a.Length); i++)
{
tempVal = 0;
tempRet.Clear();
for (int j = 0; j < a.Length; j++)
{
if (((1 << j) & i) != 0)
{
tempVal += a[j];
tempRet.Add(a[j]);
}
}
if (tempVal == m)
{
foreach (var t in tempRet)
{
Console.Write(t + " ");
}
Console.WriteLine();
}
}
}
}
class Test
{
static void Main(string[] args)
{
int[] a = { 0, 1, -1, 3, 5, 9, 1, 2, 4, 7 };
int m = 6;
int tempVal = 0;
var tempRet = new List<int>();
for (int i = 0; i < (1 << a.Length); i++)
{
tempVal = 0;
tempRet.Clear();
for (int j = 0; j < a.Length; j++)
{
if (((1 << j) & i) != 0)
{
tempVal += a[j];
tempRet.Add(a[j]);
}
}
if (tempVal == m)
{
foreach (var t in tempRet)
{
Console.Write(t + " ");
}
Console.WriteLine();
}
}
}
}
相关文章推荐
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大 java实现
- 两数之和:给定一个整数数组,找出其中两个数相加等于目标值
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
- 给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- randnumber_mn.c 生成一个数组,包括k个不重复的整数,并且要求这些整数范围为[m,n),生成的结果中不能包含inum中的数字,size表示inum的长度
- 计算1个数--计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
- 设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来。实际上就是一个背包问题