智力题目

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;
	}
}

你可能感兴趣的:(智力题目)