美文网首页算法
LeetCode7.整数反转

LeetCode7.整数反转

作者: Timmy_zzh | 来源:发表于2021-07-11 10:57 被阅读0次
1.题目描述
  • 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0
2.解题思路
  • 要将整数进行反转,可以先将整数转换成字符串,接着字符串转换为字符数组,对字符数组中的元素进行前后元素的调换

    • 元素调换可以使用一个新数组进行保存
    • 也可以在原数组中进行元素交换
    • 元素交换后的字符数组,转换成字符串,然后字符串通过Integer.valueof()方法转换成整数
    • 通过数学思维不断获取整数的最低位,并将最低位添加到结果中
  • 边界和细节问题

    • 字符串遍历数组越界控制
    • 符号问题
    • 转换过程中整数范围越界问题处理
  • 解法一:

public int reverse_v1(int x) {
    if (x == Integer.MIN_VALUE) {
        return 0;
    }
    //保存符号标记,最后返回时使用
    int sign = x > 0 ? 1 : -1;
    //负数情况,转换成正数处理
    x = x * sign;

    String val = String.valueOf(x);
    char[] chars = val.toCharArray();
    int len = chars.length;
    char[] newCh = new char[len];

    for (int i = 0; i < len; i++) {
        newCh[i] = chars[len - 1 - i];
    }
    String reverseVal = String.valueOf(newCh);

    long result = Long.valueOf(reverseVal);
    if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
        return 0;
    }
    return (int) (result * sign);
}
  • 解法二
public int reverse_v2(int x) {
    if (x == Integer.MIN_VALUE) {
        return 0;
    }
    int sign = x > 0 ? 1 : -1;
    x = x * sign;

    String val = String.valueOf(x);
    char[] chars = val.toCharArray();
    int len = chars.length;

    for (int start = 0, end = len - 1; start < len / 2; start++, end--) {
        char temp = chars[start];
        chars[start] = chars[end];
        chars[end] = temp;
    }
    String reverseVal = String.valueOf(chars);

    long result = Long.valueOf(reverseVal);
    if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
        return 0;
    }
    return (int) (result * sign);
}
  • 解法三
public int reverse(int x) {
    if (x == Integer.MIN_VALUE) {
        return 0;
    }
    int sign = x > 0 ? 1 : -1;
    x = x * sign;

    long result = 0;
    int last = 0;
    while ((last = x % 10) != x) {
        //获取个位数
        result = result * 10 + last;
        x = x / 10;
    }
    result = result * 10 + last;    //最高位数字处理
    if (result > Integer.MAX_VALUE) {
        return 0;
    }
    return (int) (result * sign);
}
3.总结
  • 解法总结
    • 根据题目要求要将整数的数字进行反转,可以先将整数转换成字符串,再将字符串转换成字符数组,然后对字符数组的元素进行交换
    • 还可以使用数学思维,不断获取整数的个位数
    • 边界和细节处理:符号处理,与整数范围问题处理
  • 数组知识总结:
    • 数组是一个固定大小的数据结构,且数组中所有元素在内存的地址是连续的
    • 可以通过数组下标随机获取对应元素

相关文章

  • LeetCode7.整数反转 JavaScript

    LeetCode7.整数反转 JavaScript 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字...

  • LeetCode7.整数反转

    原题链接 将res作为基底,然后开始逐个往前运算,循环结束之后进行一次判断,如果溢出就返回0

  • LeetCode7.整数反转

    1.题目描述 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32...

  • leetcode7. 整数反转 python实现

    题目: 解法: 这道题我们采用先将整数转换成字符串,对字符串反转,再将字符串转换回整数 。 具体代码如下:

  • 2019-05-14 LeetCode7. 整数反转

    题目很简单,却写了一小时 1.python中的幂函数是**要记牢,调试的时候觉得不可能的问题,往往是某个小细节,迅...

  • 反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 class Solution(object):def re...

  • 反转整数

    题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123输出: 321 示例 ...

  • 整数反转

  • 反转整数

    给定一个32位有符号整数,将整数中的数字进行反转(假设我们的环境只能存储32位有符号整数,其数值范围是[−2(31...

  • 反转整数

    反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例1: 输入:123输出:321 示例 2: ...

网友评论

    本文标题:LeetCode7.整数反转

    本文链接:https://www.haomeiwen.com/subject/ukrkpltx.html