Python - 如何将多重赋值更改为 JavaScript 的语法并获得给定字符串的正确排列
Python - how to change the multiple assignment to the syntax of JavaScript and get the right permutations of the given string
我在搜索回溯时遇到了一点问题。首先,在下面 link 的代码中,作为 JavaScript 程序员,我发现了一个非常奇怪的语法:
a[l], a[i] = a[i], a[l]
使用 this page 中的信息,我发现它的意思是:"assign a[i]
to the a[l]
variable and a[l]
to the a[i]
variable"。我无法理解这个的用途。我认为这将是相同的价值观。如果您首先将值分配给 a[l]
,然后尝试获取 a[l]
,对于两个变量,它将是 a[i]
。
这是一个 Python 代码,但是,我想使用相同的原理将其转换为 JavaScript。
# Python program to print all permutations with
# duplicates allowed
def toString(List):
return ''.join(List)
# Function to print permutations of string
# This function takes three parameters:
# 1. String
# 2. Starting index of the string
# 3. Ending index of the string.
def permute(a, l, r):
if l==r:
print toString(a)
else:
for i in xrange(l,r+1):
a[l], a[i] = a[i], a[l]
permute(a, l+1, r)
a[l], a[i] = a[i], a[l] # backtrack
# Driver program to test the above function
string = "aab"
n = len(string)
a = list(string)
permute(a, 0, n-1)
# This code is contributed by Bhavya Jain
您可以按照此 link 到 IDE:https://ide.geeksforgeeks.org/ASvO8MoGQr。
这段代码的作用是获取字符串 "aab".
的排列值
例如,使用"aab"作为第一个字符串,我们应该得到如下结果:aab
阿坝
aab
阿坝
咩
咩.
我尝试使用 "JavaScript" 并想出了这个:
let arr = [];
let permute = function(str, l, r) {
if (l === r) {
arr.push(str);
} else {
for (let i = l; i <= r; i++) {
str[l] = str[i];
str[i] = str[l];
permute(str, l + 1, r);
str[l] = str[i];
str[i] = str[l];
}
}
};
permute('aab', 0, 'aab'.length - 1);
console.log(arr);
我得到的结果是["aab", "aab", "aab", "aab", "aab", "aab"]
。
Link 到 JSFiddle:https://jsfiddle.net/xrfkt9qj/1/.
EDIT1 我试过 @jp_data_analysis 的答案,但它仍然 returns 不好的结果:https://jsfiddle.net/zurvm0xy/.
EDIT2 ES6 脚本版本:https://jsfiddle.net/zurvm0xy/4/.
这不是重复,变量交换只是这个问题的第一部分。请阅读全文。
以下代码 2 段代码具有相同的结果,假设值是不可变的。
Python语法
a[i], a[j] = a[j], a[i]
常规语法
x = a[i]
y = a[j]
a[i] = y
a[j] = x
为什么有效
Python 首先评估右侧。有关详细信息,请参阅 Evaluation order。
终于,我想通了一切。最重要的部分是使用 split()
函数将字符串转换为数组。
let arr = [], y, x;
let permute = function(str, l, r) {
if (l === r) {
arr.push(str.join(''));
} else {
for (let i = l; i <= r; i++) {
[str[l], str[i]] = [str[i], str[l]];
permute(str, l + 1, r);
[str[l], str[i]] = [str[i], str[l]];
}
}
};
permute('aab'.split(''), 0, 'aab'.length - 1)
console.log(arr);
我在搜索回溯时遇到了一点问题。首先,在下面 link 的代码中,作为 JavaScript 程序员,我发现了一个非常奇怪的语法:
a[l], a[i] = a[i], a[l]
使用 this page 中的信息,我发现它的意思是:"assign a[i]
to the a[l]
variable and a[l]
to the a[i]
variable"。我无法理解这个的用途。我认为这将是相同的价值观。如果您首先将值分配给 a[l]
,然后尝试获取 a[l]
,对于两个变量,它将是 a[i]
。
这是一个 Python 代码,但是,我想使用相同的原理将其转换为 JavaScript。
# Python program to print all permutations with
# duplicates allowed
def toString(List):
return ''.join(List)
# Function to print permutations of string
# This function takes three parameters:
# 1. String
# 2. Starting index of the string
# 3. Ending index of the string.
def permute(a, l, r):
if l==r:
print toString(a)
else:
for i in xrange(l,r+1):
a[l], a[i] = a[i], a[l]
permute(a, l+1, r)
a[l], a[i] = a[i], a[l] # backtrack
# Driver program to test the above function
string = "aab"
n = len(string)
a = list(string)
permute(a, 0, n-1)
# This code is contributed by Bhavya Jain
您可以按照此 link 到 IDE:https://ide.geeksforgeeks.org/ASvO8MoGQr。
这段代码的作用是获取字符串 "aab".
的排列值例如,使用"aab"作为第一个字符串,我们应该得到如下结果:aab 阿坝 aab 阿坝 咩 咩.
我尝试使用 "JavaScript" 并想出了这个:
let arr = [];
let permute = function(str, l, r) {
if (l === r) {
arr.push(str);
} else {
for (let i = l; i <= r; i++) {
str[l] = str[i];
str[i] = str[l];
permute(str, l + 1, r);
str[l] = str[i];
str[i] = str[l];
}
}
};
permute('aab', 0, 'aab'.length - 1);
console.log(arr);
我得到的结果是["aab", "aab", "aab", "aab", "aab", "aab"]
。
Link 到 JSFiddle:https://jsfiddle.net/xrfkt9qj/1/.
EDIT1 我试过 @jp_data_analysis 的答案,但它仍然 returns 不好的结果:https://jsfiddle.net/zurvm0xy/.
EDIT2 ES6 脚本版本:https://jsfiddle.net/zurvm0xy/4/.
这不是重复,变量交换只是这个问题的第一部分。请阅读全文。
以下代码 2 段代码具有相同的结果,假设值是不可变的。
Python语法
a[i], a[j] = a[j], a[i]
常规语法
x = a[i]
y = a[j]
a[i] = y
a[j] = x
为什么有效
Python 首先评估右侧。有关详细信息,请参阅 Evaluation order。
终于,我想通了一切。最重要的部分是使用 split()
函数将字符串转换为数组。
let arr = [], y, x;
let permute = function(str, l, r) {
if (l === r) {
arr.push(str.join(''));
} else {
for (let i = l; i <= r; i++) {
[str[l], str[i]] = [str[i], str[l]];
permute(str, l + 1, r);
[str[l], str[i]] = [str[i], str[l]];
}
}
};
permute('aab'.split(''), 0, 'aab'.length - 1)
console.log(arr);