198,打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。
class Solution { public int rob(int[] nums) { //空数组或一个数组情况 if(nums.length == 0){ return 0; }else if(nums.length == 1){ return nums[0]; } //定义一个list存放前边做多抢劫的数目,其实用简单的int[]就行了。 ArrayList<Integer> list=new ArrayList<Integer>(nums.length); list.add(0,nums[0]); int q = Math.max(nums[1],nums[0]); list.add(1,q); //当数组大于2个数时,当前的房子可选择打劫或者不打劫。 //1 打劫的话就是当前房子的金额加上i-2时能打劫到的最大金额(已经存放list中) //2 不打劫的话,就是打劫上一个房间的最大金额, //然后比较这俩哪个最大,最大的就是当前最大的打劫金额 for(int i = 2;i<nums.length;i++){ int a = list.get(i-2)+nums[i]; //打劫当前房间 int b = list.get(i-1); //不打劫当前房间 int c = Math.max(a,b); //比较两种情况哪个金额多 list.add(c); //金额多的放入list中 } return list.get(nums.length-1); } }
LeetCode刷题笔记(Java版)----198,打家劫舍
最新推荐文章于 2022-04-25 19:51:33 发布