- /*
- * @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 类型 (在这之前要判断其范围)
来源: http://www.bubuko.com/infodetail-2975455.html