2021-08-28 力扣 - 整数翻转 - 简单

整数翻转 - 简单

题目

给你一个 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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值