整数翻转 - 简单
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例:
输入:x = 123
输出:321
输入:x = -123
输出:-321
输入:x = 120
输出:21
输入:x = 0
输出:0
- 提示: - 231(-2147483648) <= x <= 231 - 1(2147483647)
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
涉及知识:
1、字符串和数字的相互转换
字符串转数字:
/**方法一
通过基本类型对应的包装类则可以实现把字符串转换成基本类型,8个包装类都提供了一个
parseXxx(String str)静态方法用于将字符串转换成基本类型。此方法直接使用静态方法,
不会产生多余的对象,但会抛出异常。
注意:如果字符串不是数值型字符串,转换将导致一个运行时错误。
**/
String s = "123";
byte b = Byte.parseByte(s);
short t = Short.parseShort(s);
int i = Integer.parseInt(s);
long l = Long.parseLong(s);
Float f = Float.parseFloat(s);
Double d = Double.parseDouble(s);
boolean bo = Boolean.parseBoolean(s);
char c = Character.parseCharacter(s);
/**方法二
Integer.valueOf(s) 相当于new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象。
**/
i=Integer.valueOf(s).intValue();
数字转字符串:
/**方法一
其中 value 为任意一种数字类型。将不用担心object是否为null值这一问题。
当object为null时,String.valueOf(object)的值是字符串”null”,而不是null!!
**/
String s = String.valueOf(value);
/**方法二
在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。
此方法效率最高
**/
String s = Object.toString();
/**方法三
**/
String s = i + “”;
/**方法四
使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,
以判断是否可以转换。否则容易抛出CalssCastException异常。此外,需特别小心的是因定义为
Object类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外
小心。此外,因null值可以强制转换为任何java类类型,(String)null也是合法的。
**/
String s =(String)i;
2、字符串相关函数
//获取字符串长度
string.length();
//将字符串分割为字符数组
string.toCharArray()[0];
//获取指定位置的字符
string.charAt(0);
//去掉字符串的左右空格
string.trim();
//截取字符串
string.substring(1);
string.substring(1,3);
//StringBuffer字符串拼接
StringBuffer strbuf = new StringBuffer("abc");
strbuf.append("123");
//StringBuffer字符串反转
StringBuffer strbuf = new StringBuffer("abc");
strbuf.reverse();
//StringBuffer字符串截取
StringBuffer strbuf = new StringBuffer("abc");
strbuf.subSequence(int start, int end);
//字符串拼接
string1.concat(string2);
编程语言:Java
我的解法
改了好多次,最后发现了subSequence和reverse这两个函数;
class Solution {
public int reverse(int x) {
String str = String.valueOf(x);
if(x < 0){
str = "-" + new StringBuffer(str.subSequence(1,str.length())).reverse().toString();
}else{
str = new StringBuffer(str.subSequence(0,str.length())).reverse().toString();
}
int i = 0;
try{
i = Integer.parseInt(str);
}catch(NumberFormatException e){
e.printStackTrace();
}
return i;
}
}
官方解法
复杂度分析
时间复杂度:O(log∣x∣)。翻转的次数即 xx 十进制的位数。
空间复杂度:O(1)。
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
}