精华内容
下载资源
问答
  • 整数反转JAVA

    2020-06-28 20:08:37
    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号...

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

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

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

    输入: 120
    输出: 21
    注意:

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

    package com.lxh.test;
    /**
     * 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
     * 示例 1:
     * 输入: 123
     * 输出: 321
     * 示例 2:
     * 输入: -123
     * 输出: -321
     * 示例 3:
     * 输入: 120
     * 输出: 21
     * 
     * 注意:
    
       假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。
       请根据这个假设,如果反转后整数溢出那么就返回 0。
    
     * @author dell
     *
     */
    public class Test7 {
    	public static int reverse1(int x)
    	{
    		if(x ==Integer.MIN_VALUE) return 0;
    		int neg = x<0?-1:1;
    		x *=neg;
    		int ret = 0;
    		while(x>0)
    		{
    			int n = ret;
    			n*= 10;
    			n+=x%10;
    			x/=10;
    			if(n/10!=ret) return 0;
    			ret = n;
    		}
    		return neg*ret;
    	}
    	public static int reverse2(int x)
    	{
            int rev = 0;
            while (x != 0) {
                int pop = x % 10;
                x /= 10;
                if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
                if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
                rev = rev * 10 + pop;
            }
            return rev;
    	}
    	public static void main(String[] args) {
    		System.out.println(reverse1(-123));
    		System.out.println(reverse2(-123));
    	}
    }
    
    
    展开全文
  • 7.整数反转java版,每日一题系列(此题来自力扣网)给出一个31位的有符号整数,你需要将这个整数中每位上数字进行反转。示例1:输入: 123输出: 321示例2:输入: -123输出: -321示例3:输入: 120输出: 21方法:弹出和推...

    7.整数反转java版,每日一题系列(此题来自力扣网)

    给出一个31位的有符号整数,你需要将这个整数中每位上数字进行反转。

    示例1:

    输入: 123

    输出: 321

    示例2:

    输入: -123

    输出: -321

    示例3:

    输入: 120

    输出: 21

    方法:弹出和推入数字&溢出前进行检查

    思路

    我们可以一次构建翻转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否导致溢出。

    算法:

    反转整数的方法可以与反转字符串进行类比。

    我们想重复"弹出"x的最后一位数字,并将它"推入"到rev的后面。最后,rev将于x相反。

    要在没有辅助堆栈/数组的帮助下"弹出"和"推入"数字,我们可以使用数学方法。

    //pop operation:

    pop = x % 10;

    x /= 10;

    //push operation:

    temp = rev * 10 + pop;

    rev = temp;

    但是,这种方法有溢出的风险。

    class solution {

    public int reverse(int x) {

    int rev = 0;

    while (x != 0) {

    int pop = x % 10;

    x /= 10;

    if (rev > integer.max_value/10 || (rev == integer.max_value / 10 && pop > 7)) return 0;

    if (rev < integer.min_value/10 || (rev == integer.min_value / 10 && pop < -8)) return 0;

    rev = rev * 10 + pop;

    }

    return rev;

    }

    }

    作者:leetcode链接:来源:力扣(leetcode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    来自:https://www.cnblogs.com/wjmmt/p/12858531.html

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 标签:sed--参考minus解法保留only要求whenHello 各位,这里是新治的第二篇博客,今天要解的这道题是LeetCode第七题,整数反转,先来读一下题:Given a 32-bit signed integer, reverse digits of an integer....

    标签:sed   --   参考   minus   解法   保留   only   要求   when

    Hello 各位,这里是新治的第二篇博客,今天要解的这道题是LeetCode第七题,整数反转,先来读一下题:

    Given a 32-bit signed integer, reverse digits of an integer.

    Example 1:

    Input: 123

    Output: 321

    Example 2:

    Input: -123

    Output: -321

    Example 3:

    Input: 120

    Output: 21

    Note:

    Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

    输入: 123

    输出: 321

    示例 2:

    输入: -123

    输出: -321

    示例 3:

    输入: 120

    输出: 21

    注意:

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

    先来说一下我个人解体的思路吧。

    1. 首先要确定这个数的位数, 于是新建一个 n 用于记录;由于接下来还要对 x 进行操作,因此新建一个 y 令其等于 x,可以看作是备份一个原数。

    计算位数的方法:对 x 的绝对值进行除以10 的操作,直到 x 变成0为止,每除一次就进行一次n++。

    2. 接下来新建两个整型数 t 和 ans,并且再写一个 for 循环;在这个循环中, y 用于进行除以十的操作, 然后将得到的数赋值给 t,再将得到的 t 值赋值给 ans 并使其放置在其应该在的位数。

    3. 最后进行溢出判定,也就是 int 类型的边界。

    java代码如下:

    classSolution {public int reverse(intx) {//n 求位数,y 用于保留 x 被操作前的值

    int n = 0, y =x;for(int i = 1; Math.abs(x) > 0; i++){

    x= x / 10;

    n+= 1;

    }//t 用于求每一位上的数字,ans用于记录答案

    int t = 0, ans = 0;for(int i = n ; i > 0; i--){

    t= y % 10;

    y= y / 10;

    ans+= t * Math.pow(10, i - 1);

    }//这里进行值的判定,符合题目要求的值就正常返回,不符合的就返回0。

    if (ans > Math.pow(2, 31)-2 || ans ){

    return 0;

    }else{returnans;

    }

    }

    }

    这里再讲一点,也是我自己做题的时候遇到的一个错误:

    有的数,它作为 input 是没有问题的(在 int 类型的范围中),但是其反转之后是不在范围内的,比如说下面两个 input:

    “1534236469” 和 “-1563847412”; 他们的反转分别是 "9646324351" 和 “-2147483651”,这两个都是需要我们返回 0 的输入,记得不能搞错。

    希望有所帮助,感谢。

    参考资料:

    https://leetcode.com/problems/reverse-integer/

    https://leetcode-cn.com/problems/reverse-integer/

    【LeetCode 力扣】7. Reverse Integer 整数反转 Java 解法

    标签:sed   --   参考   minus   解法   保留   only   要求   when

    展开全文
  • LeetCode_007_整数反转题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储...

    LeetCode_007_整数反转

    题目描述

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

    输入: 123

    输出: 321

    示例 2:

    输入: -123

    输出: -321

    示例 3:

    输入: 120

    输出: 21

    注意:

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/reverse-integer

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    总体分析

    题目中要求将一个有符号整数进行反转,通过题目给出的例子,需要注意以下几点:

    整数会有负数的情况,反转后符号不变。

    只能存储 32 位有符号整数,取值范围为:-2147483648 ~ 2147483647。超过此范围即为溢出。如果反转后发生了溢出情况,返回 0。

    要反转的数字最后一位是 0 的情况反转过来后要将 0 舍弃。

    如题目中的这个例子:120 --> 21。

    解决方案

    思路分析:

    首先,先分析溢出问题,对于题目中要求的 32 位有符号整数,其实也就是 int 类型,相对应的取值范围为:-2147483648 ~ 2147483647。那么发生溢出的情况就是反转过来的数不在这个范围内。

    举个例子:将 2111222239 反转过来后为 9322221112,此时这个数超过了上面的范围,这个情况就是溢出,此时返回 0 即可。

    接着,分析转换的数是负数时的情况:如果要转换的数是负数,就先取其绝对值将其反转后再将结果转换为负数返回即可。

    综上,可以设计解题流程如下,假设要转换的数为 x:

    首先判断 x 是否为 -2147483648,如果是返回 0,防止取 x 绝对值 -x 时报错。

    判断 x 是否为负数,如果是负数则先取其绝对值然后递归取反,最后将结果转换为负数。

    使用一个变量 result 保存结果,初始时为 0。

    对 x 取反时将 x % 10 依次取出最后一位数(例如: 256 % 10 = 6)放置到 result 中(即 result * 10 + x % 10),最后将 x / 10。依次进行此过程即可将 x 反转。

    在取反过程中需要注意的是要进行该判断:if (result > 214748364) 进行提前判断溢出处理。

    举个例子说明:

    1463847412 反转后为 2147483641,此时当反转到 214748364 时,还没有大于,所以没有溢出。如果 result > 214748364 说明反转后就已经溢出了。

    例如:1563847412 -> 2147483651,当反转到 214748365 时,由于大于了 214748364,所以可以提前判断溢出。

    判断 result 是否溢出,如果溢出返回 0,否则返回反转后的结果,这里判断溢出是因为前面的提前判断溢出不能判断到最后一位,如果最后一位加的数超过溢出值的话就会产生溢出,所以需要判断。不好理解的话可以结合下面代码进行理解。

    根据以上思路,可设计题解代码如下:

    /**

    * 整数反转解题方案

    *

    * @author 踏雪彡寻梅

    * @date 2020/2/6 - 12:14

    */

    class Solution {

    public int reverse(int x) {

    if (x == -2147483648) {

    // 做此判断防止取 x 绝对值时 x = -x 报错

    return 0;

    }

    if (x < 0) {

    // 如果为负数,取其绝对值调用自己然后将结果转为负数

    return -reverse(-x);

    }

    // 用于保存结果返回

    int result = 0;

    // 取反操作

    while (x != 0) {

    if (result > 214748364) {

    // 处理溢出

    // 举例:1463847412

    // 反转后:2147483641

    // 此时当反转到 214748364 时,还没有大于,所以没有溢出

    // 如果 result > 214748364 反转后就已经溢出了

    // 例如:1563847412 -> 2147483651

    // 当反转到 214748365 时,由于大于了 214748364,所以可以提前判断溢出

    return 0;

    }

    // 接收取反结果

    result = result * 10 + x % 10;

    x /= 10;

    }

    // 如果溢出就返回 0

    // 防止提前判断溢出不能判断到最后一位的情况,如果最后一位加的数超过溢出值的话就会产生溢出

    return result <= 2147483647 ? result : 0;

    }

    }

    提交结果:

    456205a0a151e67017e0ffd8f662d212.png

    提交后时间上和空间上的结果还是效果蛮好的O(∩_∩)O。接下来进行一些简单的时间复杂度和空间复杂度分析。

    时间复杂度简单分析:

    对于时间复杂度则是分析 while 循环中的代码,因为这块代码占据了程序的时间是最多的。

    while (x != 0) {

    if (result > 214748364) {

    return 0;

    }

    result = result * 10 + x % 10;

    x /= 10;

    }

    从以上代码可以看出,x 每循环一次就除以 10,直到 x = 0 时或者 result 溢出时才结束循环。这里假设 result 不溢出的情况来进行分析:

    对于 x / 10 判断 x 是否等于 0 其实可以看为:x 除了几次 10 才等于 0。这里假设这个次数为 n。

    用式子表达也就是:x / 10 / 10 / 10 / ... / 10 = x / 10n = 0,即可以表示为 x = 10n

    也就是说明,程序的运行时间主要跟 n 相关,所以需要将 n 计算出来:

    通过 x = 10n 求解 n 这个问题在高中时就已经学过了,即 n = log10x。

    所以,时间复杂度为 O(log10x) = O(lgx)。

    空间复杂度简单分析:

    空间上使用了一个 result 整型变量用来辅助接收结果,每次赋值分配的空间都是常数级别的,所以空间复杂度为 O(1)。

    小结

    解题时需要注意特殊情况:为负数的情况、尾部为 0 的情况以及整数溢出的情况。

    如有写的不足的,请见谅,请大家多多指教。

    展开全文
  • 整数反转 java 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储...
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 1234输出: 4321示例 2:输入: -1234输出: -4321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,...
  • 今天我们继续力扣之旅,还是从简单的题目下手,整数反转与回文数整数反转题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321...
  • leetcode初级算法 —— 整数反转 JAVA欢迎观看本博客题目详情 欢迎观看本博客   您好! 这是我第三次在 力扣(leetcode) 上练习算法。如有疏漏与不足之处还请多多指教。 题目详情   给出一个 32 位的有符号整数...
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其...
  • 7.整数反转Java版,每日一题系列(此题来自力扣网) 给出一个31位的有符号整数,你需要将这个整数中每位上数字进行反转。 示例1: 输入: 123 输出: 321 示例2: 输入: -123 输出: -321 示例3: 输入: 120 输出: ...
  • leetcode 整数反转 java

    2020-02-26 11:01:28
    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有...
  • leetcode 7.整数反转 Java

    2021-01-01 19:38:25
    整数反转题目链接描述示例初始代码模板代码 题目链接 https://leetcode-cn.com/problems/reverse-integer/ 描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 注意: 假设我们的环境...
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。Given a 32-bit signed integer, reverse digits of an integer.示例1:输入:123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: ...
  • leetcode 7.整数反转 java

    2020-04-27 16:58:03
    7. 题目:整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]...
  • ... 话不多说,直接上代码 思路:运用整数/10和整数%10把入参整数分解进行反转,因为题目要求不能对于超出整数范围... * 整数反转 * @param x 待反转的整数 * @return 反转后的结果 */ private static int reverse(int
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号...
  • 7. 整数反转java写法

    2020-07-20 22:39:21
    如果是正整数,利用%10和/10的方式,不断取出对应位置上的数字,并且赋值到字符串的尾部;最后,Integer.parseInt方法转化为正整数并返回。 如果是负整数,先取绝对值,然后按照%10和/10的方式,不断取出对应位置上...
  • 7.整数反转(简单) 题目如下: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0 假设环境不允许存储 64 位整数(有...
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转整数溢出那么就返回 0...
  • 如果反转整数溢出那么就返回 0。 int y = 0; while (x != 0) { //环境只能存储32位整数,当数字溢出是返回0 32位最大数字是21478364 if (y > 214748364 || y < -214748364) { return 0;
  • 在看到题目,我竟然不是想着去找他的反转的规律,而是直接通过遍历反转。想法有点硬,拉胯货色,不过能解出来就是好解。。 就是先判断数字是否带符号,也就是判断是否为负数,如果是负数,则倒转遍历转成字符串类型...
  • Hello 各位,这里是新治的第二篇博客,今天要解的这道题是LeetCode第七题,整数反转,先来读一下题:Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example 2:Input...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 809
精华内容 323
关键字:

整数反转java

java 订阅