每日两题leetcode - 344.反转字符串 & 22.括号生成

题一. 反转字符串-344

1. 题目描述

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例 1:

输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]

示例 2:

输入:[“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 提交代码

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function(s) {
    //做题用时4min
    if(s.length < 2){
        return;
    }
    for(let i = 0; i < Math.floor(s.length/2); i++){
        let temp = s[i];
        s[i] = s[s.length-i-1];
        s[s.length-i-1] = temp;
    }

};

时间复杂度:O(n),
空间复杂度:O(1)。

题二. 括号生成-22

1. 题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

提示:

1 <= n <= 8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 提交代码

思路:
使用回溯,在生成括号组的过程中一边生成一边判断,这样可以提高时间效率并能保证生成的是有效括号组;
判断是不是合法括号组的依据是“当前括号组里左括号个数一定是大于等于右括号个数的”,在代码里体现为“当前剩余的/待使用的左括号个数一定是小于右括号个数的”。

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    const res = [];
    let str = "";
    generateParenthesisCore(n, n, str, res);
    return res;
};
//回溯,参数1:当前可使用左括号个数、参数2:当前可使用右括号个数
function generateParenthesisCore(left, right, path, res){
    if(left === 0 && right === 0){
        res.push(path);
        return;
    }
    //放入左括号
    if(left > 0){
        path += "(";
        generateParenthesisCore(left-1, right, path, res);
        path = path.substring(0, path.length-1); //当前位置也可以放右括号,所以释放对当前位置的占用
    }
    //剩余右括号大于剩余的左括号,所以放置右括号
    if(right > left){
        path += ")";
        generateParenthesisCore(left, right-1, path, res);
    }
}

  • 时间复杂度:在这里插入图片描述
    ,在回溯过程中,每个答案需要 O(n)的时间复制到答案数组中。
  • 空间复杂度:O(n),除了答案数组之外,我们所需要的空间取决于递归栈的深度,每一层递归函数需要 O(1)的空间,最多递归 2n层,因此空间复杂度为 O(n)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值