Leetcode 反转整数+回文数 相关知识点

反转整数

题目

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:
输入: 123
输出: 321

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

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

注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

知识点

整形、长整型、浮点型 边界值

  • int型边界最大值:Integer.MAX_VALUE
  • int型边界最小值:Integer.MIN_VALUE
  • long型边界最大值:Long.MAX_VALUE
  • long型边界最小值:Long.MIN_VALUE
  • float型边界最大值:Float.MAX_VALUE
  • float型边界最小值:Float.MIN_VALUE

整形与长整型之间的转换

不要直接将数据类别强制转换,会编译出错。
较好方式有两种(long a = 23;)

  1. 借助Long类:
    int new_a = new Long(a).intValue();
  2. 借助字串:
    int new_a = Integer.parseInt(String.valueOf(y));

解法

其实将整数反转并不难,每次将旧整数的最后一位取余放到新整数的后面即可。当然我们也可以将整数变为字串,用字符两两交换的方法,只是效率会更低。
对于大多数人来说,这道题最容易忽略的地方在于,数值溢出的判定条件。我想到的方式有两种:

  • 解法一:将逆序后的值直接与边界值比较。
    public int reverse(int x) {long y = 0;while(x != 0){y = y*10 + x%10;x = x/10;}if(y < Integer.MIN_VALUE || y > Integer.MAX_VALUE){return 0;}else{//return new Long(y).intValue();return Integer.parseInt(String.valueOf(y));}    }
  • 解法二:将逆序的整数先用long型表示,看逆序数long型和int型数值是否一致。
    public int reverse(int x) {long y = 0;while(x != 0){y = y*10 + (x%10);x = x/10;}int y1 = new Long(y).intValue();if(y1 != y){return 0;}else{return y1;}}

回文数

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:
输入: 121
输出: true

示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:
你能不将整数转为字符串来解决这个问题吗?

知识点

缺省数据类型&对应类

原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

Number类常用方法

  • xxxValue():将Number对象转化为xxx数据类型的值并返回
    – byteValue():以byte形式返回指定的数值
    – doubleValue():以double形式返回指定的数值
    – floatValue():以float形式返回指定的数值
    – intValue():以int形式返回指定的数值
    – longValue():以long形式返回指定的数值
    – shortValue():以short形式返回指定的数值
 Long a = new Long(13546);b = a.intValue();// Integer i = 1;// Integer n = Integer.valueOf(1);Integer i = new Integer(1);int j = i.floatValue();
  • public int compareTo(NumberSubClass referenceName):将number对象与参数比较,返回number对象值-参数的差值
int x = 1;        // x是一个整形数
Integer y = new Integer(2);     // y是一个整形类
return y.compareTo(x);      // 返回d为1
  • public boolean equals(Object o):判断number对象是否与参数
int x = 5;
Integer y = 10;
Integer z = 5;
return y.equal(x);     // 返回false
return z.equal(x);      //返回true
  • valueof():返回一个Number对象指定的内置数据类型
    – Integer valueOf(int i):返回一个表示指定int型的Integer实例
    – Integer valueOf(String s):返回一个表示指定String型的Integer实例
    – Integer valueOf(String s, int radix):返回一个Integer对象,该对象中保存了用第二个参数提供的基数进行解析是从指定Sting中提取的值
Integer b = Integer.valueOf("444",16);      //使用16进制
  • toString():返回以一个字符串表示的Number对象值
    – String toString()
    – static String toString(int i)
Integer x = 5;
return x.toString();
return Integer.toString(12);
  • parseInt():将字符串解析为int类型
    – static int parseInt(String s)
    – static int parseInt(String s, int radix)
int x = Integer.parseInt("9");
double c = Double.parseDouble("5");
int b = Integer.parseInt("444",16);    //基数“444”为16进制

Math类常用方法

  • abs():返回参数的绝对值
  • ceil():返回大于等于(>=)给定参数的最小整数
  • floor():返回小于等于(<=)给定参数的最大整数
  • rint():返回与参数最接近的整数,返回类型为double。
  • round():对数字进行四舍五入。算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整。所以Math.round(11.5)=12,而Math.round(-11.5)=11。
  • min():返回两个参数中的最小值
  • max():返回两个参数中的最大值
  • exp():返回自然数底数e的参数次方
  • log():返回参数的自然数底数的对数值
  • pow():返回第一个参数的第二个次方
  • sqrt():求参数的算术平方根
  • sin():求指定double类型参数的正弦值
  • cos():求指定double类型参数的余弦值
  • tan():求指定double类型参数的正切值
  • toRadians():将角度转化为弧度
  • toDegrees():将参数转化为角度
  • random():返回一个随机数

解法

想要解这道题,首先要理解回文数的意义,抓两个重点:一是对象——整数;二是左一等于右一,左二等于右二依次类推。还有种情况可以直接排除,只要整数为负则一定是非回文数。
方法一:将整数逆序,然后将逆序前后的数字比较是否一致。当然这种情况需要先判断数字书否为负。

class Solution {public boolean isPalindrome(int x) {if(x < 0)        return false;else{int y = 0;int x1 = x;while(x1 != 0){y = y*10+x1%10;x1 = x1/10;}if(x == y)      return true;else         return false;}}
}

方法二:先求数字的长度。通过求商求余逐个将最高位与最低位相比较,相同的话比较次高位和次低位。如果在过程中发现不同,则为非回文数;只有当所有高低位均相同时,才为回文数。

class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}else{int y = 0;int x1 = x;while(x1 != 0){y = y*10+x1%10;x1 = x1/10;}if(x == y){return true;}else{return false;}}}
}

方法三:是方法二的变种,思路是相同的,不同之处在于,法三直接将数字转换为字符串求解,这样代码相对简单。
注释中讲解了int转String常见的三种方法。

class Solution {public boolean isPalindrome(int x) {// String s = String.valueOf(x);   //法一:int转String// String s = x+"";                //法二:int转String        String s = Integer.toString(x);    //法三:int转Stringchar[] ch = s.toCharArray();  // System.out.println(ch[0]);   //只有将String转换成char[]才能对字串中每个字符进行修改// int len = s.length();     //String获取字串长度int high = ch.length-1;      //数组获取字串长度int low = 0;while(low < high){if(ch[low] != ch[high]){return false;}low += 1;high -= 1;}        return true;}
}

【JAVA学习】2 整形、长整型、Number类、Math相关推荐

  1. java中怎么输入长整型_c语言如何输入长整型 scanf输入长整型

    C语言中无符号长整型数的输入输出格式是什么? 整数变量的分类:basic integer:int short integer:short int long int将修饰符unsigned添加到上述三个 ...

  2. java长整型转换为整型_java ip地址转换为长整型

    java ip地址转换为长整型 java ip地址转换为长整型: public class Util { /** * 字符串ip转换为long * @param 字符串ip * @return */ ...

  3. python 长整型_Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习...

    #coding=utf-8 __author__ = 'Administrator' #Python变量类型 #Python数字,python支持四种不同的数据类型 int整型 long长整型 flo ...

  4. java长整型数输入格式_java编程之计算16位长整型数字中0-9出现次数(从命令窗输入数据)...

    /* *读入一个16位的长整型,利用switch语句计算0-9这十个数字中,每个字出现的次数 **/ import java.util.Scanner; class number{ public st ...

  5. Java | 由天数计算日期:长整型long转换为日期

    如题,晚上突发奇想要写个程序算一下和烧饼是哪天认识的,记得很多年前QQ是能看加好友的时间的,现在却只能看认识天数了,所以只好自己动手啦. 用的是Java,这是上学期学的内容了,但知识全还给老师了,花了 ...

  6. Java的长整型Long/long后面的数字什么情况下必须加L?

    [1] 问题的由来   在日常开发中,实体类需要序列化,一般写法如下: public class User implements java.io.Serializable {private stati ...

  7. c语言中长整型的作用,C语言,整形和长整型都占四个字节?

    C语言中,整型常量和长整型常量,有什么区别? 整型常量和长整型常量(包括有符号的和无符号的),为什么占用字节数和一.指代不同 整型常量:是通常的整数,包括正整数.负整数和0,其数据类型显然是整型. 长 ...

  8. java长整型时间转日期_C#长整型时间与java长整型时间转换

    最近在有一个解析并转发病毒软件日志的活,这个软件用的是SQLite嵌入式数据库存储病毒日志.查询病毒记录后,我发现它用长整型存储攻击时间这个字段,而且是一个10位的值.而我的解析系统是用C#写的,C# ...

  9. Java实现点分十进制IP和长整型转换

    转载:http://blog.csdn.net/lin111000713/article/details/16337391 原理: IP地址是一个以点作为分隔符的十进制四字段字符串,例如"1 ...

最新文章

  1. 彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM+LIO-SAM)
  2. Sqlserver 2000 迷你、便携企业管理器(10M),支持Dts编辑
  3. Prototype和Scriptaculous圣经——《Ajax实战:Prototype与Scriptaculous篇》
  4. 活体检测很复杂?仅使用opencv就能实现!(附源码)
  5. matlab里输出恒压的逆变器,基于IGBT逆变器的异步电机变频调速系统的MATLAB仿真...
  6. 面试题 08.09. 括号
  7. android spi读写不通,Android-SPI学习笔记
  8. Eclipse:An internal error occurred during: Building workspace. GC overhead limit exceeded
  9. python播放音乐同步歌词_Python 歌词解析器 音乐与歌词同步播放
  10. python12岁该学吗_本人12岁,对编程感兴趣,之前也学过python,被爸妈打消积极性,面对爸妈的反对,我该顺从还是继续?...
  11. 手机与电脑共享文件资源的几种方法
  12. poj2315足球游戏
  13. 使用canvas画出满天繁星
  14. 图书馆小程序—Alpha迭代—第七周会议记录
  15. 分享10个非常不错的封面设计模板
  16. 作为一位软件测试工程师,应当需要哪些能力?
  17. 浙江生物计算机技术,New Page 1
  18. 中国全球GPU市场竞争格局分析
  19. Myth源码解析系列之一-项目简介
  20. 存储区域网(SAN)

热门文章

  1. 输入数字1-7中的任意一个数,若输入1,则输出 星期一,一次类推,输入7,则输出星期日。(使用switch语句)
  2. Python之程序调试
  3. 中国联通、中国电信、中国移动的3G速度对比!
  4. android 覆盖安装 代码没有更新,android 无法覆盖安装软件
  5. 同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区分
  6. Macbook(M2 Air) 使用笔记/经验分享
  7. C语言中字符串赋值处理方式,C语言中字符串赋值处理方式
  8. JavaScript函数式编程之偏函数(Partial Function)
  9. SQLyog远程连接mysql
  10. 你这么拼,家里一定很穷吧!