大家好我正在处理以下CoderByte问题。
使用JavaScript语言,具有PermutationStep(num)功能 获取传递的num参数并返回下一个更大的数字 比使用相同数字的num。例如:如果num为123则返回132, 如果它是12453返回12534.如果一个数字没有更大的排列, 返回-1(即999)。
使用下面的框中的参数测试功能来测试您的代码 有不同的论点。
我的代码是
var PermutationStep = function(num){
var newNum = num.toString().split("");
for(var i = (newNum.length - 1); i >= 0; i--){
if(newNum[i] > newNum[i-1]){
newNum.splice(i-1,2,newNum[i],newNum[i-1]);
var firstHalf = newNum.slice(0,i);
var secondHalf = newNum.slice(i);
break;
}
else{
return -1;
}
}
var sorted = secondHalf.sort(function(a,b){return a - b});
return firstHalf.concat(sorted).join("");
};
我的代码包括循环遍历数字数组并在newNum [i]>时切换术语newNum [i-1]和newNum [i]。 newNum [i - 1]然后将所有数字放在这两个术语的右边并对它们进行排序。逻辑上这是有效的,但我的代码并没有按照我希望的方式运行。例如,PermutationStep(112211)
在返回121112
时返回-1。任何人都可以帮我调试吗?
答案 0 :(得分:0)
确保在进行比较/评估数字时处理数字而不是字符串...我遇到的一个大问题是数字被评估为字符串。尝试将newNum[i]
变量包装在Number()
函数中,如Number(newNum[i])
。
请尝试以下代码。
var PermutationStep = function (num) {
var newNum = num.toString().split("");
for (var i = (newNum.length - 1); i >= 0; i--) {
if (Number(newNum[i]) > Number(newNum[i - 1])) {
newNum.splice(i - 1, 2, newNum[i], newNum[i - 1]);
var firstHalf = newNum.slice(0, i);
var secondHalf = newNum.slice(i);
break;
}
else {
return -1;
}
}
var sorted = secondHalf.sort(function (a, b) { return Number(a) - Number(b) });
return firstHalf.concat(sorted).join("");
};