智力题目
package org.sunhouji.util;import java.util.ArrayList;import java.util.List;public class TestStrs {public static void main(String[] args) {System.out.println(3>>0);List<List<Integer>> param = getStrToList5("123456789");isRight(param, 110);}/** * 长度为1的字符串 * @param str * @return *//*private List<Integer> getStrToList1(String str){List<Integer> result = new ArrayList<Integer>();result.add(Integer.parseInt(str));return result;}private List<List<Integer>> getStrToList2(String str){List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> r1 = new ArrayList<Integer>();result.add(getStrToList1(str));Integer frist = Integer.parseInt(str.substring(0,1));Integer second = Integer.parseInt(str.substring(1));r1.add(frist);r1.add(second);result.add(r1);return result;}private List<List<Integer>> getStrToList3(String str){List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> r1 = new ArrayList<Integer>();Integer frist = Integer.parseInt(str.substring(0,1));List<List<Integer>> lists = getStrToList2(str.substring(1));for(int i=0;i<lists.size();i++){List<Integer> bean = lists.get(i);bean.add(frist);result.add(bean);}Integer second = Integer.parseInt(str.substring(0,2));r1.add(second);r1.add(Integer.parseInt(str.substring(2)));result.add(r1);return result;}private List<List<Integer>> getStrToList4(String str){List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> r1 = new ArrayList<Integer>();Integer frist = Integer.parseInt(str.substring(0,1));List<List<Integer>> lists = getStrToList3(str.substring(1));for(int i=0;i<lists.size();i++){List<Integer> bean = lists.get(i);bean.add(frist);result.add(bean);}Integer second = Integer.parseInt(str.substring(0,2));lists = getStrToList2(str.substring(2));for(int i=0;i<lists.size();i++){List<Integer> bean = lists.get(i);bean.add(second);result.add(bean);}Integer thrid = Integer.parseInt(str.substring(0,3));r1.add(thrid);r1.add(Integer.parseInt(str.substring(3)));result.add(r1);return result;}*/private static List<List<Integer>> getStrToList5(String str){List<List<Integer>> result = new ArrayList<List<Integer>>();for(int i=1;i<=str.length();i++){Integer frist = Integer.parseInt(str.substring(0,i));String s = str.substring(i);List<List<Integer>> lists = getStrToList5(s);if(lists.size()<1 || lists==null){List<Integer> bean = new ArrayList<Integer>();bean.add(frist);result.add(bean);}else{for(int a=0;a<lists.size();a++){List<Integer> bean = lists.get(a);bean.add(0,frist);result.add(bean);}}}return result;}/** * 判断是否正确的数组 * @return */private static boolean isRight(List<List<Integer>> param,int value){boolean result = false;int sum = 0;for(int i=0;i<param.size();i++){List<Integer> bean = param.get(i);for(int j=0;j<bean.size();j++){sum += bean.get(j);}if(sum>=value && bean.size()>2){List<List<Integer>> tmp = isOk(bean);for(int a=0;a<tmp.size();a++){List<Integer> t = tmp.get(a);int r = 0;for(int b=0;b<t.size();b++){r+=t.get(b);}if(r==value){System.out.println(t.toString());}}}}System.out.println(sum);return result;}/** * 分析可变种的组合 * @param bean * @param value */private static List<List<Integer>> isOk(List<Integer> bean){List<List<Integer>> result = new ArrayList<List<Integer>>();//System.out.println("=="+bean.toString()+":"+Math.pow(2, bean.size()-1));for(int i=0;i<Math.pow(2, bean.size()-1);i++){result.add(changeList(bean, i));}return result;}/** * 通过二进制value 获取值 * @param bean * @param value * @return */private static List<Integer> changeList(List<Integer> bean,int value){List<Integer> result = new ArrayList<Integer>();if(value ==0 ){return bean;}else{result.add(bean.get(0));for(int i=1;i<=bean.size();i++){if((value>>(i-1))%2==1){result.add(-bean.get(i));}else{if(i<bean.size())result.add(bean.get(i));}}}return result;}}