Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript n对括号的所有有效组合 我正在学习js。。 我正在尝试写一个简单的js程序。。 我要做的是打印n-pair的所有有效组合 括号的正确打开和关闭 如, 我已经写了逻辑,你能告诉我它是否正确吗_Javascript - Fatal编程技术网

Javascript n对括号的所有有效组合 我正在学习js。。 我正在尝试写一个简单的js程序。。 我要做的是打印n-pair的所有有效组合 括号的正确打开和关闭 如, 我已经写了逻辑,你能告诉我它是否正确吗

Javascript n对括号的所有有效组合 我正在学习js。。 我正在尝试写一个简单的js程序。。 我要做的是打印n-pair的所有有效组合 括号的正确打开和关闭 如, 我已经写了逻辑,你能告诉我它是否正确吗,javascript,Javascript,这是错误的,因为此示例或此的函数将返回true。这是错误的,因为此示例或此的函数将返回true。检查是错误的,但您可以很容易地修复它:在for循环的每个步骤中,开始括号的数量不能小于结束括号的数量: if (rightCount < leftCount) return false; 整个函数应如下所示: function(str) { var rightParentheses = '('; var leftParentheses = ')'; var ri

这是错误的,因为此示例或此

的函数将返回true。这是错误的,因为此示例或此

的函数将返回true。检查是错误的,但您可以很容易地修复它:在for循环的每个步骤中,开始括号的数量不能小于结束括号的数量:

if (rightCount < leftCount)
    return false;
整个函数应如下所示:

function(str) {
    var rightParentheses = '(';
    var leftParentheses = ')';
    var rightCount = 0;
    var leftCount = 0;

    for (var i = 0; i <= str.length; i++) {
       if (rightParentheses == str.charAt(i))
          rightCount++;
       else if (leftParentheses == str.charAt(i))
          leftCount++;

       if (rightCount < leftCount)
          return false;
    }

    return rightCount == leftCount;
}
如果要生成所有有效字符串,可以使用此函数:

function nPair(n) {
    if (n == 0)
        return [""];

    var result = [];
    for (var i = 0; i < n; ++i) {

        var lefts = nPair(i);
        var rights = nPair(n - i - 1);

        for (var l = 0; l < lefts.length; ++l)
            for (var r = 0; r < rights.length; ++r)
                result.push("(" + lefts[l] + ")" + rights[r]);
    }

    return result;
}

// result of nPair(3):
// ["()()()", "()(())", "(())()", "(()())", "((()))"]

检查是错误的,但是您可以很容易地修复它:在for循环的每个步骤中,开始括号的数量不能小于结束括号的数量:

if (rightCount < leftCount)
    return false;
整个函数应如下所示:

function(str) {
    var rightParentheses = '(';
    var leftParentheses = ')';
    var rightCount = 0;
    var leftCount = 0;

    for (var i = 0; i <= str.length; i++) {
       if (rightParentheses == str.charAt(i))
          rightCount++;
       else if (leftParentheses == str.charAt(i))
          leftCount++;

       if (rightCount < leftCount)
          return false;
    }

    return rightCount == leftCount;
}
如果要生成所有有效字符串,可以使用此函数:

function nPair(n) {
    if (n == 0)
        return [""];

    var result = [];
    for (var i = 0; i < n; ++i) {

        var lefts = nPair(i);
        var rights = nPair(n - i - 1);

        for (var l = 0; l < lefts.length; ++l)
            for (var r = 0; r < rights.length; ++r)
                result.push("(" + lefts[l] + ")" + rights[r]);
    }

    return result;
}

// result of nPair(3):
// ["()()()", "()(())", "(())()", "(()())", "((()))"]

您的函数错误,请尝试检查左括号和右括号是否平衡:

function isValid(str){
  var stripedStr = str.replace(/[^\(\)]+/g, '');

  return stripedStr.split('').reduce(function(a, b){
    return a > -1 ? b === '(' ? a + 1 : a - 1 : -1;
  }, 0) === 0;
}
stripedStr-用于删除任何不包含或不包含的字符。 -返回一个数组,以便我们可以使用。 -对累加器应用函数,数组从左到右的每个值都必须将其减少为单个值。 reduce以0作为初始值开始,在reduce函数中我们计算括号 +1代表-1代表 如果我们的计数器从不低于0,并且以0结束,则字符串是有效的。 您也可以这样编写reduce函数:

function(previousValue, currentValue){
  if (previousValue > -1){
    if (currentValue === '('){
      return previousValue + 1;
    } else {
      return previousValue - 1;
    }
  }

  return -1;
}
这相当于:

function(a, b){
  return a > -1 ? b === '(' ? a + 1 : a - 1 : -1;
}

您的函数错误,请尝试检查左括号和右括号是否平衡:

function isValid(str){
  var stripedStr = str.replace(/[^\(\)]+/g, '');

  return stripedStr.split('').reduce(function(a, b){
    return a > -1 ? b === '(' ? a + 1 : a - 1 : -1;
  }, 0) === 0;
}
stripedStr-用于删除任何不包含或不包含的字符。 -返回一个数组,以便我们可以使用。 -对累加器应用函数,数组从左到右的每个值都必须将其减少为单个值。 reduce以0作为初始值开始,在reduce函数中我们计算括号 +1代表-1代表 如果我们的计数器从不低于0,并且以0结束,则字符串是有效的。 您也可以这样编写reduce函数:

function(previousValue, currentValue){
  if (previousValue > -1){
    if (currentValue === '('){
      return previousValue + 1;
    } else {
      return previousValue - 1;
    }
  }

  return -1;
}
这相当于:

function(a, b){
  return a > -1 ? b === '(' ? a + 1 : a - 1 : -1;
}

试试这个,我对你的代码做了一点修改。修改及其解释在注释中标出

module.exports = Parentheses = (function() {
  var _isParenthesesMatch = function(str) {
    var parentheses = str.length;
    var rightParentheses = '(';
    var leftParentheses = ')';
    var count=0;

    for(i=0;i<str.length;i++){
        //this is to check valid combination start always from ( and end with )
            if(str.charAt(0)==rightParentheses && str.length-1==leftParentheses) 
            {
               if(rightParentheses == str.charAt(i))
               {
                  count++;  //this will calculate how many times rightParentheses is present & increment count by 1
               }
               else if(leftParentheses == str.charAt(i))
               {
                  count--;  //this will simply decrement count to match valid sequence
               }
            }

            if(count==0){
              return true;
            }


  }

}());

试试这个,我对你的代码做了一点修改。修改及其解释在注释中标出

module.exports = Parentheses = (function() {
  var _isParenthesesMatch = function(str) {
    var parentheses = str.length;
    var rightParentheses = '(';
    var leftParentheses = ')';
    var count=0;

    for(i=0;i<str.length;i++){
        //this is to check valid combination start always from ( and end with )
            if(str.charAt(0)==rightParentheses && str.length-1==leftParentheses) 
            {
               if(rightParentheses == str.charAt(i))
               {
                  count++;  //this will calculate how many times rightParentheses is present & increment count by 1
               }
               else if(leftParentheses == str.charAt(i))
               {
                  count--;  //this will simply decrement count to match valid sequence
               }
            }

            if(count==0){
              return true;
            }


  }

}());

谢谢你的电子邮件你的代码很复杂,你能解释得更详细些以便我能理解…我使用的是一个计数器,左括号=+1,右括号=-1,如果计数器等于-1或结尾不等于0,字符串无效。确定。它会删除任何不包含或的字符。你能在代码中注释其他行吗…这对我来说太难理解了…请帮助…我不理解这行…你能用简单的if和else替换吗。。。返回一个>-1?b==?a+1:a-1:-1;谢谢你的电子邮件你的代码很复杂,你能解释得更详细些以便我能理解…我使用的是一个计数器,左括号=+1,右括号=-1,如果计数器等于-1或结尾不等于0,字符串无效。确定。它会删除任何不包含或的字符。你能在代码中注释其他行吗…这对我来说太难理解了…请帮助…我不理解这行…你能用简单的if和else替换吗。。。返回一个>-1?b==?a+1:a-1:-1;