一条街上有N个房子,每个房子里有一些值钱的东西。一个小偷计划去这条街上偷盗,但是考虑到不被迅速抓到,小偷不能偷连续的两个房子。请编码一个function,计算出小偷能偷盗的最大物品价值。
输入为一个N的数组,数组的每一位数字代表了一个房子里东西的价值。
values[]=[9, 3, 5, 8, 2, 4, 7]
返回 24 (偷第一个,第四个,第七个房子得到的价值)
public static int getResult(int index,int[] data){ if(index>=data.length) return 0; int maxValue = data[index]; int i = index+2; //向前走一步,如果可以走则加到value int maxValue2 = 0; if(i<data.length){ maxValue +=getResult(i,data); } //平行走一步 if(index+1<data.length){ maxValue2+=getResult(index+1,data); } maxValue = maxValue>maxValue2?maxValue:maxValue2; return maxValue; } public static void main(String []args){ int[] data = new int[]{9,8,0,9,8}; int result = getResult(0,data); System.out.println(result); }
public static int doIt(int n, int[] values, int left) { if (n == 0) return 0; if (n == 1) return values[left]; if (n == 2) return Math.max(values[left], values[left + 1]); int yes = values[left] + doIt((n - 2), values, left + 2); int no = doIt((n - 1), values, left + 1); return Math.max(yes, no); }