【发布时间】:2021-06-01 14:43:33
【问题描述】:
我想找到由 给定 数的排列产生的最大数。
如果给定的数是123,那么它的排列得到的最大数是321。
编辑
我通过改变取得了一些进展
if (str.length === 0) return "";
if (str.length === 1) return str;
到
if (str.length === 0) {
return "";
} else {
return str;
}
然而,一个问题仍然存在:该函数返回一个字符串。实际上,数组成员是 strings 而不是 numbers。
function findPerms(num) {
var str = num.toString();
if (str.length === 0) {
return "";
} else {
return str;
}
let result = [];
for (let i = 0; i < str.length; i++) {
const currentChar = str[i];
const remainingChars = str.slice(0, i) + str.slice(i + 1);
for (let j = 0; j < remainingChars.length; j++) {
result.push(Number(currentChar + findPerms(remainingChars)[j]));
}
}
result.sort(function(a, b) {
return a - b;
});
return result[result.length - 1];
}
console.log(findPerms(11121));
console.log(typeof findPerms(11121));
为此我做了:
function findPerms(num) {
var str = num.toString();
if (str.length === 0) return "";
if (str.length === 1) return str;
let result = [];
for (let i = 0; i < str.length; i++) {
const currentChar = str[i];
const remainingChars = str.slice(0, i) + str.slice(i + 1);
for (let j = 0; j < remainingChars.length; j++) {
result.push(Number(currentChar + findPerms(remainingChars)[j]));
}
}
result.sort(function(a, b) {
return a - b;
});
return result[result.length - 1];
}
console.log(findPerms(11121));
console.log(typeof findPerms(11121));
问题
我一定是犯了一个我无法发现的错误,因为上面的函数返回 NaN(即使 typeof findPerms(11121) 返回“数字”)。
我的错误在哪里?
【问题讨论】:
-
您的问题是为什么它返回
NaN或为什么返回typeof NaN === "number"(这将与Why does typeof NaN return 'number'? 重复)? -
你做了什么调试?您是否尝试过断言
currentChar + findPerms(remainingChars)[j]始终是您期望的值?例如。findPerms(remainingChars)[j]在某个时候是undefined。了解how to debug small programs; Rubber Duck Debug您的代码并尝试解释这是为什么。 -
@SebastianSimon 我的问题是为什么函数返回NaN而不是数组中的最大数。
-
@Razvan Zamfir ,
findPerms的返回类型是什么?让我猜猜它是一个空字符串("")还是一个字符(“1..9”)?当你从findPerms(remainingChars)[j]读取一个值时,其中j是一个索引,它变成了undefined,那么你怎么能用undefiend添加任何数字呢?number + undefined = NaN,所以result中有很多NaN值,其中result的最后一项也是NaN,但是您的预期输出值是多少? -
错字:
findPerms( remainingChars )[ j ]->findPerms( remainingChars[ j ] ).
标签: javascript ecmascript-6 ecmascript-5