这是掘金上面的一道算法题,原题是用python写的。我觉得JS递归也能实现,就试着写了一下:
解题思路:
- 找出数组中最大的金额
- 相邻房间不能闯入规则,去除相邻元素,切割数据
- 再找出最大的金额,,切割数组,依次递归调用
实现代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32var arr = [1, 2, 3, 4, 5, 6];
function fn(arr) {
console.log('传入的数组为:' + JSON.stringify(arr));
var max = 0,
index = 0,
leftArr = [],
rightArr = [],
len = arr.length;
// 数组为空
if (arr.length == 0) {
return 0;
} else if (arr.length == 1) {
// 只有一个值
return arr[0];
} else {
// 循环找到最大的值
for (let i in arr) {
if (arr[i] > max) {
max = arr[i];
index = +i;
}
}
// 根据最大的值,去掉左右各一位(相邻不能闯入规则)
leftArr = index > 0 ? arr.slice(0, index - 1) : [];
rightArr = arr.slice(index + 2, len);
}
return max + fn(leftArr) + fn(rightArr);
}
var count = fn(arr);
console.log(count);
应该还有更好的实现方式(>_<)