这是一个比较经典的题目了,首先在函数的主体内用了dfs的方法,并通过“ i > indexs[x]”来限制重复结果的出现,这样仍然可能出现重复的结果比如这种情况:
[-1,-1,-1,2]
就是结果中的元素出现了冗余 重复多次,于是用了strings记录每个结果的“sort-->tostring”形式,这样可以避免重复结果的出现。
目前这个方案还存在优化空间,欢迎指正ou~
/**
* @param {number[]} nums
* @return {number[][]}
*/
var inner = function (x, y) {
if (x < y) {
return 1;
} else if (x > y) {
return -1;
} else {
return 0;
}
}
var make = function(strings, newone) {
var n = newone.concat();
n.sort(inner);
var s = n.join('');
if (strings.length === 0 || strings.indexOf(s) === -1) {
strings.push(s);
return true;
}
return false;
}
var dfs = function(nums, state, chain, res, indexs, strings) {
var n = nums.length;
if (chain.length === 3) {
if((chain[0] + chain[1] + chain[2] === 0)){
if(make(strings, chain)) {
var cp = chain.concat();
res.push(cp);
}
}
return;
}
var x = indexs.length-1
for (var i = 0; i<n; i++) {
var p = nums[i];
if(state[i] && i > indexs[x]) {
chain.push(p);
indexs.push(i);
state[i] = false;
dfs(nums, state, chain, res, indexs, strings);
state[i] = true;
chain.pop();
indexs.pop()
}
}
}
var threeSum = function(nums) {
var res = [];
var state = [];
var strings = [];
for(var j = 0; j<nums.length; j++){
state.push(true);
}
dfs(nums, state, [], res, [-1], strings);
return res;
};
点个小心心再走吧❥(^_-)
网友评论