编辑
2022-11-09
数据结构与算法
0
请注意,本文编写于 555 天前,最后修改于 246 天前,其中某些信息可能已经过时。

目录

题目
理解题意
解题思路
解法

题目

​ 给出一个32位的有符号整数,将这个正数每位上的数字进行反转。输入:123 输出: 321

输入:-123 输出:-321

输入:120 输出: 21 // 首位非0,数值溢出返回0。

理解题意

​ 逆序输出问题,也是一个首位交换问题,两端分别对应位置的数字进行交换。

解题思路

方案一:逆序输出

​ 整数转字符串,字符串转数组

​ 数据结构:字符数组

​ 遍历

方案二:首尾交换

​ 整数转字符串,字符串转数组

​ 数据结构:字符数组

​ 遍历

解法

解法一:暴力解法

​ 1、整数转字符串,再转字符数组

​ 2、反向遍历字符数组,并将元素存储到新数组中

​ 3、将新数组转成字符串,再转成整数输出

边界问题:

​ 1、数组索引越界

​ 2、数值溢出边界:溢出则返回0

java
class Solution { public int reverse(int x) { if (x == Integer.MIN_VALUE) { // 整数类型的最小值的绝对值要比最大值大1 return 0; } int sign = x > 0 ? 1 : -1; x = x < 0 ? -x : x; // 1、整数转字符串 String str = String.valueOf(x); char[] chars = str.toCharArray(); // 2、反向遍历字符数组,并将元素存储到新的数组中 int len = chars.length; char[] array = new char[len]; for (int i = 0; i < len; i++) { array[len - 1 - i] = chars[i]; } // 3、将数组转成字符串,再转成数字 long value = Long.valueOf(String.valueOf(array)); return (value > Integer.MAX_VALUE || value < Integer.MIN_VALUE) ? 0 : (int)value * sign; } }

解法二:首尾交换

​ 1、整数转字符串,再转字符数组

​ 2、交换首位和末位数字

​ 3、循环操作:依次交换第二个和倒数第二个,知道数组剩下1个或0个

​ 4、将原数组转成字符串,再转成整数输出

边界问题:

​ 数组索引越界,数组长度为偶数,反转完成标志位start > end;为奇数时,反转完成标志位 start == end。

​ 数组溢出边界,溢出则返回0;

java
class Solution { public int reverse(int x) { if (x == Integer.MIN_VALUE || x == Integer.MAX_VALUE) return 0; int sign = x > 0 ? 1 : -1; x = x < 0 ? -x : x; String str = String.valueOf(x); char[] chars = str.toCharArray(); int start = 0, end = chars.length - 1; while (start < end) { char tmp = chars[start]; chars[start] = chars[end]; chars[end] = tmp; start++; end--; } long value = Long.valueOf(String.valueOf(chars)); return (value > Integer.MAX_VALUE || value < Integer.MIN_VALUE) ? 0 : (int)value * sign; } }

本文作者:whitebear

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!