Question
Solution1
首先对nums进行排序。[x,y,z,h,i,j,k]然后考虑先去前两个数,添加两个指针,第一个指向z,第二个指向末位元素,即k。计算target-x-y,将其与z+k进行比较,如果相同则是一个结果,如果z+k小,则第一个指针右移动一个位置,如果大,则第二个指针左移一个位置。
1 | class Solution: |
Solution2
适用更广的答案。N可以是任意数目。
当N大于2时,采用dfs来迭代。当N==2时,采用两个指针的方法,一头一尾,不断的进行比较。需要注意的是避免重复情况。dfs里面的条件判断就是为了避免重复情况。同时在N==2里面,有一个while循环,也会是为了避免重复情况。
1 | class Solution: |