Android 菜鸡的进阶->leetcode 2&7

博客围绕链表数字相加和整数反转问题展开。给定两个非空链表表示非负整数,数字逆序存储,需将两数相加并以链表返回。还提及整数反转可能的溢出情况及判断逻辑,给出相关题解网址,涉及 Android 实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

/**
* 散装翻译
* 题目:
* 您将获得两个非空链表,表示两个非负整数。
* 数字以相反的顺序存储,每个节点包含一个数字。
* 添加两个数字并将其作为链接列表返回。
* 您可以假设这两个数字不包含任何前导零,除了数字0本身。
*
* Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
* Output: 7 -> 0 -> 8
* Explanation: 342 + 465 = 807.
*
*/


这个我看了题解,顺便带上网址

https://leetcode.com/problemset/all/

https://leetcode-cn.com/problemset/all/ 中文

这题 对于俺这种没基础的根本看不懂

反正 Android 可以 反转 然后加减

后来发现第7题正好就是反转

为了便于解释,我们假设 rev\text{rev}rev 是正数。

  1. 如果 temp=rev⋅10+poptemp = \text{rev} \cdot 10 + \text{pop}temp=rev⋅10+pop 导致溢出,那么一定有 rev≥INTMAX10\text{rev} \geq \frac{INTMAX}{10}rev≥10INTMAX​。
  2. 如果 rev>INTMAX10\text{rev} > \frac{INTMAX}{10}rev>10INTMAX​,那么 temp=rev⋅10+poptemp = \text{rev} \cdot 10 + \text{pop}temp=rev⋅10+pop 一定会溢出。
  3. 如果 rev==INTMAX10\text{rev} == \frac{INTMAX}{10}rev==10INTMAX​,那么只要 pop>7\text{pop} > 7pop>7,temp=rev⋅10+poptemp = \text{rev} \cdot 10 + \text{pop}temp=rev⋅10+pop 就会溢出。

当 rev\text{rev}rev 为负时可以应用类似的逻辑。


  public int reverseInt(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;
    }

这个是大佬们写的,感觉很牛叉 ,还判断了 泄漏啥的

思路 我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。 算法 反转整数的方法可以与反转字符串进行类比。 我们想重复“弹出” x 的最后一位数字,并将它“推入”到 \text{rev} 的后面。最后,\text{rev} 将与 x 相反。 要在没有辅助堆栈 / 数

 


Android

Method2

 /**
         *
         * 这个方法 如果是负数的话 就不行了
         * 可以把他先Math.abs()  先判断正负,>0 <0留个标记 ,取绝对值  然后再给他加上正负号*1 *-1
         *
         */
        StringBuilder reverse = new StringBuilder("546454530").reverse();
        int i = Integer.parseInt(reverse.toString());
        System.out.println(" reverse  : " + i);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值