你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。
- (void)rob{
NSArray * array = @[@1, @5, @20, @2, @11, @13, @50, @33, @88, @100];
int a = [array.firstObject intValue]; //第一户的钱数
int b = MAX(a, [array[1] intValue]); //前两户中最多的一户钱数
int temp = b; //当前偷到的总金额
NSLog(@"前2次偷窃总金额为%d元", b);
for(int i = 2; i < array.count; i++){
temp = MAX(a+[array[i] intValue], b);
a = b;
b = temp;
NSLog(@"第%d次偷窃总金额为%d元, 当前户的金额数为:%@", i+1, b, array[i]);
}
}
//swift
func rob(_ nums: [Int]) -> Int {
guard nums.count > 0 else {
return -1
}
guard nums.count > 1 else {
return nums[0]
}
var tupe = (nums[0], max(nums[0], nums[1]))
for i in 2 ..< nums.count {
let temp = max(tupe.0 + nums[i], tupe.1)
tupe = (tupe.1, temp)
}
return tupe.1
}
网友评论