题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
解题
解法一、转换字符串 && 反转字符串
这里只需要判断边界(是否溢出,负数符号)
public int Reverse(int x) { var flag = x < 0 ? -1 : 1; var str = x.ToString(); var ans = default(long); if (flag > 0) { ans = long.Parse(new String(str.ToCharArray().Reverse().ToArray())); if (ans > int.MaxValue) return 0; } else { str = str.Substring(1); ans = long.Parse(new String(str.ToCharArray().Reverse().ToArray())); if ((ans - int.MaxValue) > 1) return 0; } return (int)ans * flag; }
解法二、数学计算
字符串的操作是比较耗时,而且需要额外的空间
个位 = x % 10;
x减少一位 = x / 10
反转数字 = ans * 10 + 个位
不断循环直至x == 0,只需要判断溢出条件就可以
public int Reverse(int x) { int ans = 0; while (x != 0) { int pop = x % 10; x /= 10; if (ans > int.MaxValue / 10 || ((ans == int.MaxValue / 10) && pop > 7)) return 0; if (ans < int.MinValue / 10 || ((ans == int.MinValue / 10) && pop < -8)) return 0; ans = ans * 10 + pop; } return ans; }