我在一次采访中被问到这个问题:
如果一个整数可以表示为回文的总和(向后与向前相同),则该整数是 特殊 的。例如,22 和 121 都是特殊的,因为 22 等于
11+11
而 121 等于29+92
。给定一个整数数组,计算其中有多少元素是特殊的。
但我想不出任何解决办法。如何才能做到这一点?
原文由 The Coder 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在一次采访中被问到这个问题:
如果一个整数可以表示为回文的总和(向后与向前相同),则该整数是 特殊 的。例如,22 和 121 都是特殊的,因为 22 等于
11+11
而 121 等于29+92
。给定一个整数数组,计算其中有多少元素是特殊的。
但我想不出任何解决办法。如何才能做到这一点?
原文由 The Coder 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个相当天真的伪代码解决方案,用于确定数字是否“特殊”:
Given an number N (assumed to be an integer)
Let I = Floor(N / 2)
Let J = Ceil(N / 2)
While (I > 0)
If I is the reverse of J Then
Return True
End
I <- I - 1
J <- J + 1
End
Return False
一个快速的 JS 实现:
function isSpecial(n) {
for (var i = Math.floor(n / 2), j = Math.ceil(n / 2); i > 0; i--, j++) {
console.info(`checking ${i} + ${j}`);
if (i.toString().split('').reverse().join('') === j.toString())
return true;
}
return false;
}
console.log(isSpecial(121));
我将把它留给你实现函数来计算数组中的特殊数字。这可以通过改进用于检查字符串反转的相当粗略的方法或可能通过更智能地跳过数字来提高效率。
原文由 p.s.w.g 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
在面试的压力和匆忙中,我肯定会找到一个愚蠢而天真的解决方案。
伪代码