题解 | #反转数字#
反转数字
http://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a
描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^{31}, 2^{31} − 1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。
示例1
输入: 12 返回值: 21
示例2
输入: -123 返回值: -321
示例3
输入: 10 返回值: 1
示例4
输入: 1147483649 返回值: 0
思路
其实大家看上面的图就能大概理解啥意思了。通过 % 10,得到最后一位 也就是个位; 然后将这个数字加上 之前计算的结果 * 10.
AC 代码
public int reverse (int x) { // write code here long result = 0; // 还有数字没有反转完时 while (x != 0) { // * 10 是为了将已经发转的数字向左移一位。 // % 10 是为了只留下 个位数 result = result * 10 + x % 10; // 如果结果溢出了,就直接返回 0 if (result > Integer.MAX_VALUE) { return 0; } // 剔除掉已经反转后的 个位 x = x / 10; } return result > Integer.MAX_VALUE ? 0 : (int)result; }
时间复杂度:O(N), N 为数字的位数。
空间复杂度:O(N), 存储结果的字符串占用的空间。
最后
大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。