20220409,21min,相隔1个月

|
```javascript /**

  • @param {number} n
  • @return {string[]} */ // 08:48 -> 09:09 var generateParenthesis = function(n) { let set = new Set([‘()’]) for (let i = 2; i <= n; i++) {
    1. let itemSet = new Set();
    2. for (let item of set) {
    3. for (let j = 0; j < item.length; j++) {
    4. // itemSet.add([item.slice(0, j) + '()' + item.slice(j)]) // bug:会导致结果比预期的少,因为item.length每次只有1,比字符串的length少
    5. itemSet.add(item.slice(0, j) + '()' + item.slice(j))
    6. }
    7. }
    8. set = itemSet
    } return […set]; }; ``` | | —- |

20220406,11min

| 20220406```javascript /**

  • @param {number} n
  • @return {string[]} */ // 09:05 -> 09:16 var generateParenthesis = function(n) { let set = new Set([‘()’]); for (let i = 2; i <= n; i++) { let nextSet = new Set(); for (let s of set) { for (let j = 0; j <= s.length; j++) {
    1. // nextSet.add(s.slice(0, j) + '()', s.slice(j, s.length)); // bug: + 写成,了
    2. nextSet.add(s.slice(0, j) + '()' + s.slice(j, s.length));
    } } set = nextSet; } return […set]; }; ``` 执行用时:68 ms, 在所有 JavaScript 提交中击败了46.69%的用户
    内存消耗:42.7 MB, 在所有 JavaScript 提交中击败了19.70%的用户
    通过测试用例:8 / 8 | | —- |

20220405,11min

| 20220405```javascript /**

  • @param {number} n
  • @return {string[]} */ // 09:48 -> 09:59 // n-1 -> n var generateParenthesis = function(n) { let set = new Set([‘()’]); // 1对 for (let i = 2; i <= n; i++) { let nextSet = new Set(); for (str of set) { for (let j = 0; j <= str.length; j++) {
    1. nextSet.add(str.slice(0, j) + '()' + str.slice(j, str.length));
    } } set = nextSet } return […set]; }; ``` | | —- |

20220403,不通过

| 20220403```javascript /**

  • @param {number} n
  • @return {string[]} / // 15:02 -> 15:20 // 知道n-1的情况时,就会知道n的情况 // 在n-1的每个空隙都插入一个(),再去重,就是n时的()数 var generateParenthesis = function(n) { // let set = new Set([‘()’]); // bug => 其实是写对的,不是bug // let set = new Set(‘()’); // bug let set = new Set([‘()’]) // for (let i = 0; i < n; i++) { // bug: for (let i = 2; i <= n; i++) { // let nextSet = new Set([]); // Set()就行,不用Set([]) let nextSet = new Set(); // for (let j = 0; j < set.length; j++) { // bug for (let j = 0; j <= set.length; j++) { // bug // nextSet.add(set.slice(0, j) + ‘()’ + set.slice(j)); // bug:是set[j].slice(),当前字符串,而不是set.slice() nextSet.add(set[j].slice(0, j) + ‘()’ + set[j].slice(j)); } set = nextSet } // return nextSet; // bug:nextSet is not defined; // return set; // bug:未完成从集合set到数组array的转换 return […set]; } ``` 不通过
    *知识点:

    - set使用不熟练. new Set(), new Set([‘()’])
    - 实际上需要3层循环,而我只写了2层
    - 2 -> n的循环,
    - set内部循环出每个有效的项,
    - 循环出每项每个位置插入
    - n为1是’()’,所以循环从i = 2开始。一直循环到i = n,返回[…set]
    | | —- |

20220402,不知道思路

| 20220402```javascript /**

  • @param {number} n
  • @return {string[]} */ // 22:12 -> 22:21, // 如果知道了n-1的情况,就知道n的情况 // n-1的基础上的()的每个空隙都插入一个括号 // 第1个的时候是(),第2个就是()(), (()), ()(),然后去重

var generateParenthesis = function(n) {

}; ``` 思路有,算法不知道该怎么写,不知道该怎么把括号插入到第一个去。 | | —- |