观察以下功能。
function PermutationStep(num) {
var max = Number(String(num).split('').sort((a,b)=>b-a).join(''))
console.log(max); // 9431
for(var i = num; i < max; i++){
let perm = Number(String(i).split('').sort((a,b) => b-a).join('')) === max;
console.log(perm);
if(i > num && perm) { // I don't understand why this returns 9314 as opposed to the max since perm is set equal max.
return i;
}
}
return -1;
}
console.log(PermutationStep(9143));
它的设计目的是要获取一个数字,然后找到该数字的下一个排列。例如。 9143应该返回9314。
除了一行,我理解代码。 if语句。如果最大值为=== 9431,为什么函数返回9314作为排列?
答案 0 :(得分:0)
因为这一行:
let perm = Number(String(i).split('').sort((a,b) => b-a).join('')) === max;
...采用9143(i
)的数字并将其重新排列为高位在先,然后转换回数字。该数字为9431,即max
,因此,由于9431 === 9431
为true
,因此perm
为true。然后,在if
中满足i > num
(9314 > 9143
为true
)并且perm
为true
的情况下,满足条件。 / p>
答案 1 :(得分:-1)
该函数确定最大值,然后在最大值之前查找下一个。
代码
let perm = Number(String(i).split('').sort((a,b)=>b-a).join(''))===max;
正在比较 Number(String(i).split('')。sort((a,b)=> ba).join(''))与 max ,而 perm 变量将为true或false。