leetcode(7): Reverse Integer 源码实现 runtime: 8ms

题目 :Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

题目分析及部分代码解析:

1、需要考虑一位数,比如1,2,3等特殊情况,返回本身。

2、需要考虑0,返回0.

3、需要考虑如123000,45600等末尾有若干零的情况,正确结果应为321、654,不应该出现000321,00654等情况。

4、需要4字节int类型数据的取值范围:-2147483648 ~ 2147483647 。注意,中间位数倒转是也会出现溢出,比如:1234567898,第一次倒转为

80000000000,第二次倒转为8900000000,其实第一次倒转已经溢出,在中间的choose变量加一句条件判断即可。

源码里的注释写得还较详细,可以直接看源码:

 1 class Solution {
 2 public:
 3     int reverse(int x) {
 4
 5         long long result = 0; //result为结果保存变量
 6         int label = 1;            //label为输入x每一位的中间保存变量,比如x=123,label=3,2,1
 7         int temp1 = 0;         //temp1为临时变量,用于计算输入x的位数
 8         int len=0;                //len为输入x的位数,比如x=123,len=3
 9         int mi = 1;               //mi为每一位需要的幂次
10         if (x==0)                 //x为0,直接返回0
11             return 0;
12         if (x/10 == 0)         //x为一位数,返回本身
13             return x;
14
15         temp1 = x;
16
17         while(temp1/10 != 0)   //计算x的位数
18         {
19             ++len;
20             temp1 = temp1/10;
21         }
22         ++len;
23
24         while (x%10 == 0 )     //特殊情况:如果x=123000,45600,则结果应为321,654,利用此循环去除后面的多余0
25         {
26             x = x/10;
27             len--;
28          }
29
30         int k = len;               //此时len为去除末尾若干0的实际位数,k位后续的循环次数
31
32         long long choose = 0;  //choose用判断中间位数倒转后是否超过取值范围,比如x=1234567898, 则第一次的中间倒转choose = 8000000000已经超值,需要返回0
33
34         for (int i=0; i<k; i++)
35         {
36             label = x%10; //取此时末尾一位数
37
38             for (int m=0;m<len-1;m++)   //计算此时的末尾数需要乘的幂数
39             {
40                 mi = mi*10;
41             }
42
43             choose = mi;
44         choose = label*choose;
45
46         if (choose > INT_MAX || choose < INT_MIN) //判断中间倒转是否超值
47                 return 0;
48
49             result = result + choose; //进行累加,得到结果result
50
51             if (result >INT_MAX || result <INT_MIN) //result超值,也需返回0
52                 return 0;
53
54             len--; //更新len
55             mi = 1; //将mi置1,为下一位的幂数计算做准备
56             x = x/10;  //更新x , 比如x = 123 ->>> x =12 ->>>x =1
57
58         }
59
60         return (int)result;    //返回最终结果,需要将类型强制转换为int类型
61     }
62 };

说明一下:源码可能相对其他作者的要长一些,但运行时间还较为理想。

此代码的运行时间:

时间分布:

非常欢迎和大家一起交流!

时间: 2024-12-28 11:56:45

leetcode(7): Reverse Integer 源码实现 runtime: 8ms的相关文章

LeetCode:Reverse Integer - 翻转数字

1.题目名称 Reverse Integer(翻转数字) 2.题目地址 https://leetcode.com/problems/reverse-integer/ 3.题目内容 英文:Reverse digits of an integer. 中文:翻转一个正整数的各位,形成一个新数字 例如:x = 123, return 321:x = -123, return -321 4.一个有瑕疵的方法(不能AC) 一个比较好想到的方法,是先将输入的数字转换为字符串,再将字符串翻转后转换为数字.这个方

LeetCode 007 Reverse Integer

[题目] Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 [题意] 反转int型整数,输出的也是int型的整数 [思路] 如要考虑两种特殊情况: 1. 类似100这样的整数翻转之后为1 2. 翻转之后的值溢出该如何处理, 本题的测试用例中似乎没有给出溢出的情况 在实际面试时需要跟面试官明确这种情况的处理方法. 基于这点事实,本题规定如果超出正边界返回INT_MA

Leetcode 数 Reverse Integer

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Reverse Integer Total Accepted: 17472 Total Submissions: 43938 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 click to show spoilers. Have you thought

由自动装箱和拆箱引发我看Integer源码

背景和问题 在看别人整理的资料时,看到如下一段代码: package com.sitech.test; /** * 自动装箱和拆箱 jdk1.6 * @author liaowp * */ public class TestInteger { public static void main(String[] args) { Integer i1 = 80, i2 = 80, i3 = 999, i4 = 999; System.out.println(i1 == i2);//true Syste

【LeetCode】Reverse Integer (2 solutions)

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to show spoilers. Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have alread

[LeetCode][JavaScript]Reverse Integer

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to show spoilers. Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have alread

LeetCode 7 Reverse Integer(反转数字)

题目来源:https://leetcode.com/problems/reverse-integer/ Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 解题思路: 其实这道题看起来非常简单,要实现也是几行代码的事.但是有个小问题容易被忽略,就是边界问题.什么意思呢?如果我们输入的整数超出了int的表达范围,这个问题要怎么解决呢? 用比int更大的数据类型存储我们转

基本类型Integer源码分析

1. 源码相关的说明参考java 8 doc https://docs.oracle.com/javase/8/docs/api/ 2.自动装箱使用缓存原理: 调用static valueOf从而使用内部静态类static class IntegerCache{},其中cache最大值可以调整,通过VM options参数调整: 说明:只有Integer能调整cache上限,其他的基本类型缓存原理都是固定值127,具体参考源码. 原文地址:https://www.cnblogs.com/jayi

Java 基础 - Integer 源码

上班闲的时候看下源码,边看边更新,欢迎评论 继承关系 其中 Number 是个抽象类,主要抽象了一下方法: 即数值型的类型转换 变量 @Native public static final int MIN_VALUE = 0x80000000; int 型最小值,表示-2^(32-1) @Native public static final int MAX_VALUE = 0x7fffffff; int 型最大值,表示 2^(32-1) - 1 因为 Java 都是有符号的数值,所以 int 范