import java.util.Arrays;


public class Test {
	//测试版[非正式版,待改善]
	/**小算法:
	 * 功能:给定一个数字结果,能在一个数组找到所有符合数字结果的结果序列
	 * 	   [补充:保证数据是有序序列[否则:支持顺序;例如 需要的结果是7 1,6和6-1是两种不同结果,会被记录]]
	 * getResult 方法名
	 * 参数列表:
	 * 	index : 索引值
	 *  finalNum : 期望的结果值
	 *  rsum : 当前累加结果
	 *  datas : 数据源
	 *  result : 当前结果
	 *  results : 所有结果集
	 *  @return String 结果 例如:head-1,2,4-1,6-2,5-3,4-7 
	 *  				  String.split("-"):可以接收到一个结果的字符数组
	 *  			    承上: String.split(","):可以获取到每个结果的每个组成元素	  		
	*/
	static String getResult
	(int index,int finalNum,int rsum,int[] datas,String result,String results){
		for(int i=index;i<datas.length;i++){//遍历数据源中每个数据
			result+=datas[i];//将当前的这个数据放入当前结果中
			int sum=rsum+datas[i];//自定义一个变量来统计当前的累加结果
			if(sum>=finalNum){//当前累加结果是否大于或等于指定的结果
				results+=sum==finalNum?"-"+result:"";//如果满足结果就将当前结果放入结果集中[并以"-"分隔每个结果],否则就加""字符串
				result="";//初始化当前结果
				return results;//返回结果集
			}
			result+=",";//添加当前结果的子数据的分隔符
			results = getResult(i+1,finalNum,sum,datas,result,results);//递归深入
			result=result.substring(0,result.indexOf(""+datas[i]));//获取当前数据在当前结果之前的数据并赋值给当前结果
		}
		return results;//返回结果集
	}

	
	public static void main(String[] args){
		int[] datas = new int[]{6,1,2,3,4,5,6,7};
		//保证数据是有序序列[否则:支持顺序;例如 需要的结果是7 1,6和6-1是两种不同结果,会被记录]
		Arrays.sort(datas);
		System.out.println(getResult(0,7,0,datas,"","head"));
	}
}
最近下载更多
httdsb  LV1 2020年12月23日
q1019943332  LV1 2018年6月6日
etzt123  LV3 2016年6月3日
1042704561  LV1 2016年4月22日
圆月不再  LV1 2016年3月29日
lxm5644  LV8 2016年3月22日
785131182  LV1 2016年3月14日
zuizuicode  LV1 2016年3月8日
tankai998  LV12 2016年3月1日
tom_xizi  LV8 2016年3月1日
最近浏览更多
httdsb  LV1 2020年12月23日
薛振杰  LV1 2020年8月19日
sanmaov587  LV1 2020年7月25日
demo11111 2020年6月16日
暂无贡献等级
余多多 2020年6月12日
暂无贡献等级
yxw3332640 2020年6月3日
暂无贡献等级
0312wangchen  LV26 2020年5月26日
1111112222  LV6 2020年4月29日
千千千千千千  LV1 2020年4月13日
lllpppwww  LV5 2020年4月9日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友