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日