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