/* * @lc app=leetcode.cn id=7 lang=c * * [7] 整数反转 * * https://leetcode-cn.com/problems/reverse-integer/description/ * * algorithms * Easy (31.36%) * Total Accepted: 77.7K * Total Submissions: 247.8K * Testcase Example: '123' * * 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 * * 示例 1: * * 输入: 123 * 输出: 321 * * * 示例 2: * * 输入: -123 * 输出: -321 * * * 示例 3: * * 输入: 120 * 输出: 21 * * * 注意: * * 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 * */ int reverse(int x) { long i =0; long t = x; while(t){ i = i*10+(t%10); t= t/10; } if (i < INT_MIN || i >INT_MAX) //判定是否在int可表达的有效范围内 { return 0; } return i; }
这道题相对来说很好理解,用余数除10的方法就可以实现整数的翻转。
要注意,这里设置成long类型,然后在最后判断是否在int范围内。否则会超出范围。
-----------------------------------------------------------------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=7 lang=python3 # # [7] 整数反转 # # https://leetcode-cn.com/problems/reverse-integer/description/ # # algorithms # Easy (31.70%) # Total Accepted: 86K # Total Submissions: 271.4K # Testcase Example: '123' # # 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 # # 示例 1: # # 输入: 123 # 输出: 321 # # # 示例 2: # # 输入: -123 # 输出: -321 # # # 示例 3: # # 输入: 120 # 输出: 21 # # # 注意: # # 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 # # class Solution: def reverse(self, x: int) -> int: plus_minus = "" reverse_x = "" if x<0: plus_minus = "-" x = -x for i in str(x): reverse_x = i + reverse_x reverse_x = plus_minus +reverse_x if int(reverse_x)>pow(2,31)-1 or int(reverse_x)<pow(-2,31): return 0 return int(reverse_x)
python这里得益于高级脚本语言的便捷,可以先把整形转成字符串,按后一位+前一位 这样的方式就可以实现翻转。
然后再把字符串转换成int类型(在这之前要判断其范围)