用JavaScript解决此问题的更有效的方法是什么

时间:2019-07-09 06:55:52

标签: javascript algorithm

遇到编码难题。

问题是编写一个函数,该函数返回比N结尾的任意高的数字(以0结尾)。

我的解决方法是:

function solution(N) {
    for (let n = N +1; n <= N + 10; n++) {
        if (n % 10 === 0) return n;
    }
}

8 个答案:

答案 0 :(得分:4)

您可以划分并使用Math.ceil

const solution = (n) => Math.ceil((n+1)/10) * 10 

console.log(solution(49))
console.log(solution(40))
console.log(solution(41))
console.log(solution(0))
console.log(solution(-1))
console.log(solution(-11))

答案 1 :(得分:3)

我认为这是最快的:

function solution(N) {
    return 1000000000;
}

除非有反对的规则,否则这似乎是一个棘手的问题!

很有趣:

只有一种解决方法!为每个功能运行1到999999999之间的所有n。我得到了这个结果:

@FrançoisHuppé解决方案:2.884秒

@Mark Meyer解决方案:3.25秒

@assoron解决方案:3.79秒

@Sharon S解决方案:8.824秒

var t = Date.now();
for(var n = 0; n < 1000000000; n++){
    var res = solution1(n);
}
document.write('@François Huppé solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');

var t = Date.now();
for(var n = 0; n < 1000000000; n++){
    var res = solution2(n);
}
document.write('@Mark Meyer solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');

var t = Date.now();
for(var n = 0; n < 1000000000; n++){
    var res = solution3(n);
}
document.write('@assoron solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');

var t = Date.now();
for(var n = 0; n < 1000000000; n++){
    var res = solution4(n);
}
document.write('@Sharon S solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');



function solution1(n) {
    return 1000000000;
}
function solution2(n) {
    return Math.ceil((n+1)/10) * 10;
}
function solution3(n) {
    return n + (10 - n % 10);
}
function solution4(N) {
    for (let n = N +1; n <= N + 10; n++) {
        if (n % 10 === 0) return n;
    }
}

答案 2 :(得分:2)

我只需将'0'连接到末尾,然后转换为数字:

const solution = n => Number(n + '0')

您还可以忽略输入并返回最大可能的数字(最大可能的 input 为.9999e9,因此1e9将适用于所有输入)

const solution = n => 1e9;

答案 3 :(得分:2)

如果需要任意更大的10的倍数。 最简单的方法是将其乘以10。

const solution = n => n * 10

答案 4 :(得分:2)

没有数学,使用mod。

const solution = n => n + 10 - n % 10

console.log(solution(57))
console.log(solution(23))
console.log(solution(1))
console.log(solution(221))
console.log(solution(9000))

对于小于10 ^ 9的N,您可以随时添加一个if来捕获这些数字。

答案 5 :(得分:1)

由于没有人考虑过精度问题,因此可以合理地假设结果必须在安全整数内,因此我们可以简单地返回最大安全输入:

const safe = Number.MAX_SAFE_INTEGER-1
const solution = n => safe
console.log(solution(2))

请注意,结果是预先计算的,因此我们只需要从内存中加载常量并返回它即可。

答案 6 :(得分:0)

不确定是否需要使用负数,但是可以使用我认为的技巧,该技巧将为您提供一个比n大的下一个数字,该数字以0结尾:

function solution(number) {
	var remainder = number % 10;
	if(remainder === 0) {
		return number + 10;
	} else {
		return number + (10 - remainder);
	}
}

console.log(solution(42));
console.log(solution(50));
console.log(solution(105));

编辑:assoron的解决方案使用相同的逻辑,但是只是一个衬里。

答案 7 :(得分:0)

function solution(n)
{
    return n % 10 ? n + (10 - n % 10) : n + 10;
}