![]()
![]()
![]()
1 public static void main(String[] args) {
2 char[] s ={'3', '2', '3', '^', '3','^', '1'};
3 eatgold(s);
4 }
5
6 private static void eatgold(char[] value) {
7 // char[] value=value.toCharArray();
8 int length=value.length;
9 int count=0;
10 //计算二叉树的层数
11 while(length>0){
12 length-=Math.pow(2, count);
13 count++;
14
15 }
16 for(int i=0;i<value.length;i++){
17 if(value[i] == '^'){
18 value[i]= '0';
19
20 }
21 }
22 ArrayList<Integer> list=new ArrayList<Integer>();
23 //计算二叉树每一层的和
24 for(int i=0;i<count;i++){
25 int index=0;
26 for(int j=(int) Math.pow(2, i)-1;j<Math.pow(2, i+1)-1&&j<value.length;j++){
27 index += Integer.parseInt(value[j]+"");
28 }
29 list.add(index);
30 }
31 int sum=0;
32 for(int i=0;i<list.size();i++){
33 sum+=list.get(i);
34 }
35 //两个端点的数,是去除里面第一个,或者最后倒数第二个,比较去掉最小的那个
36 int max=sum-Math.min(list.get(1), list.get(list.size()-2));
37 int maint=0;
38 //中间的几个相邻的去除,找出最大的
39 for(int i=1;i<list.size()-1;i++){
40 maint=sum-list.get(i-1)-list.get(i+1);
41 if(max<maint){
42 max=maint;
43 }
44 }
45 System.out.println(max);
46 }