来自JavaScript Coderbyte的不需要的输出

时间:2014-10-25 23:01:59

标签: javascript

大家好我正在处理以下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。任何人都可以帮我调试吗?

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("");

};