arts-20180910

Algorithm

本次题目由同事提供。

题目
已知字符串 str='abcdefg',求一个方法 unFlattenDeep(str) , 可以返回一个对象 Obj ,使 Obj.a.b.c.d.e.f.g = 1

思考

  • 最暴力的方法,递归。
  • 聪明点的方法,ES5 的 Array Reduce 方法。

我的解答:

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
/**
* @param {string} Str
* @return {Object} Obj
* 使用 递归来解决
*/

var unFlattenDeep = function(Str) {
var i = 0;
var Obj = {};
var arr = Str.split('');

function setFirstChild(o, key) {
// 查找完毕
if (i === arr.length - 1) {
o[key] = 1;
return;
} else {
o[key] = {};
}

setFirstChild(o[key], arr[++i]);
}

setFirstChild(Obj, arr[i]);

return Obj;
};

var Str = 'abcdefg';

console.log(unFlattenDeep(Str))
1
2
3
4
5
6
7
8
9
10
11
/**
* 使用 Reduce 来解决
*/

function unFlattenDeep(arr, obj) {
return arr.reduce((o, k, i, a) => (o[k] = i === a.length - 1 ? 1 : {}), obj) && obj;
}

let res = unFlattenDeep('abcd'.split(''), {});

console.log(res.a.b.c.d)

然后,同事说出了他的解法

Json 反序列化法
只需要把字符串处理成JSON 格式, 然后解析字符串即可。
(喷血)

Share && Review

想学机器学习只能再学一遍Python、Java、C++ ?
前端福利来了

从TensorFlow.js入手了解机器学习
https://mp.weixin.qq.com/s/gpMTMaCKQRJu13F-QK4NCA

Tips

本次没有。