Ruby 反整数
我试图反转整数的位数:Ruby 反整数,ruby,Ruby,我试图反转整数的位数:123456=>654321,我能想到的最佳解决方案是123456.to_.reverse.to_I。我觉得这是太多的代码。有人有比这更好的方法吗?这里有另一种不转换字符串的方法 x = 12345 y = 0 while x > 0 do y = y*10 y = y + (x%10) x = x/10 puts y end 这个算法也可以在很多面试中被问到……不管你用哪种语言……这个逻辑都是一样的。 上面使用Ruby
123456=>654321
,我能想到的最佳解决方案是123456.to_.reverse.to_I
。我觉得这是太多的代码。有人有比这更好的方法吗?这里有另一种不转换字符串的方法
x = 12345
y = 0
while x > 0 do
y = y*10
y = y + (x%10)
x = x/10
puts y
end
这个算法也可以在很多面试中被问到……不管你用哪种语言……这个逻辑都是一样的。
上面使用Ruby的示例这是一个非常“代码高尔夫”式的答案,我不建议用真正的代码来编写
但是,您可以通过以下方式在答案上多刮一个字符:
123456.to_s.reverse.to_i
123456.digits.join.to_i
编辑:
或者(同样,仅作为“代码高尔夫”答案!!)如果您很乐意以字符串而不是整数来结束,您可以使用以下选项使此分类器更均匀:
123456.digits*'' #=> "654321"
我们可以在如下所示的对象级别实现这一点
class Integer
def reverse
number = self
reversed = 0
reversed, number = (reversed*10 + number % 10), number / 10 until number == 0
reversed
end
end
p 1234.reverse => 4321
一般来说,我认为只有两种方法可以实现这一目标:
一,
二,。转换为str,反转,转换回(你这样做了)
计算机内存是二进制的,所以它不知道十进制(我希望这是正确的词)数字,所以您需要“引入”它们。在Javascript中反转整数的数字
解决方案
输入示例
输出
我不认为你能在这方面有所改进。这是一个不同寻常的转变。只有选择了整数的字符串形式,它才有意义。注意,您丢失了结尾0
s(因为它们以相反的形式变成前导零,对于整数来说,这是它们如何显示的属性,而不是数据固有的)。对于这项不那么简单的任务,您发现18个字母的代码太多了吗?:)不是更短,而是更快:def reverse(n)r=0;r、 n=(r*10+n%10),n/10而n!=0; r end
@NeilSlater u刚刚帮助我防止了一个大的生产问题,这可能是由于失去了end0的
:)@darek nedza看到差异可能不是很明显,但它确实随着n的增加而增加。
n = whatever
result = 0
while n > 0
d, m = n.divmod(10)
result = result * 10 + m
n = d
end
var reverse = function(x) {
let result = 0
while (x) {
result = result * 10 + x % 10
x = x / 10 | 0
}
return Math.abs(result) > 2147483647 ? 0 : result
};
console.log(reverse(-1254))
-4521