【算法-字符串-两道】 比较版本号 & 括号生成

165. 比较版本号

输入:version1 = "0.1", version2 = "1.1"
输出:-1
解释:version1 中下标为 0 的修订号是 "0",
version2 中下标为 0 的修订号是 "1"0 < 1,
所以 version1 < version2
  1. 先把两个字符串转换成数组
  2. 取最长的长度
  3. 遍历
  4. 如果没有值就设置成0
  5. 否则把数字前的0去除
/**
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function(version1, version2) {
    let s1 = version1.split('.')
    let s2 = version2.split('.')
    // . 分割 转换成数组

    // 取数组长度最大的作为循坏长度
    let n = Math.max(s1.length,s2.length)
    for (let i = 0;i < n;i++) {
        // 如果这个数字不存在就设置成0
        // 否则就把这个数字前面的0先去除  使用的是parseInt
        let code1 = s1[i] === undefined ? 0 : parseInt(s1[i]) 
        let code2 = s2[i] === undefined ? 0 : parseInt(s2[i]) 
        // 再比较哪个大
          if (code1 > code2) {
        return 1;
    } else if (code1 < code2) {
        return -1;
    } 
  }
  return 0
};

22. 括号生成

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    const res = [];

   function dfs(left,right,str) {
       // 如果字符串的长度到了2n 说明已经组合完毕了
       if (str.length == 2 * n) {
           res.push(str)
           return
       }
       // 如果左边的括号还有,那么他可以直接拿出来
       if (left > 0) {
           dfs(left - 1,right,str + '(')
       }
       // 如果左边的括号小于右边的括号,说明右边的多了,就可以方右边的括号
       if (left < right) {
           dfs(left,right - 1,str + ')')
       }
    }

    // 最开始左右括号都是n,str为空
    dfs(n,n,'')
    return res;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值