• 2. Add Two Numbers


    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

     //本题的核心是反向进位,即,l1与l2同位置的元素相加,需要向后而非向前+1。
     //可以采用的解决思路有两个
     //1. 将l1和l2还原成整数,对其相加后再反向放入List。
     //   优点:简单直观
     //   缺点:如果链表足够长,其组成的数字超过2^31-1,则超出了int的极值
     //2. 反向进位,即同位置元素相加,若要进位则向后进一位(即本解)
     //   弥补了如果链表过长可能造成的溢出问题。
    public class Solution {
    	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    		ListNode head = new ListNode(0);
    		ListNode d = head;
    		int sum = 0;
    		//只要l1或者l2尚有剩余元素,则继续遍历,每次都将l1和l2的同位置元素相加后除以10求余,所得余数就是这一位的最终结果
    		
    		while (l1 != null || l2 != null) {
    			if (l1 != null) {
    				sum = sum + l1.val;
    				l1 = l1.next;
    			}
    			if (l2 != null) {
    				sum = sum + l2.val;
    				l2 = l2.next;
    			}
    			ListNode tmp = new ListNode(1);
    				tmp.val = sum % 10;
    				d.next = tmp;
    				d = d.next;
    				sum = sum / 10;//sum保留的每一步的进位值
    		}
    		//如果最后一位相加产生进位,则在链表的最后添加一个新的val=1的元素
    		if(sum == 1){
    			d.next = new ListNode(1);
    		}
    
    		return head.next;
    	}
    }
    

    与本题结果无关,但是在解题过程中发现的Tips  

    1. 通过移位运算来进行2的指数运算,即231 等价于 2<<30,在二进制中,10向左移30位,即2^31,这样做的执行效率极快,亦不用通过Math.pow来完成

    2. long num = 2; 所定义的类型依然是int, 如果要定义一个long,则long num = 2L,需要加上L

    附Java内置类型。值得注意的是,Java的内置类型的取值范围是定值,不是根据计算机的位数来动态决定的。

    类型名称类型定义类型取值
    boolean 布尔值,作二元判断 truefalse
    byte 8位有符号整数 最小值-128,最大值127
    short 16位有符号整数 最小值-32768,最大值32767
    int 32位有符号整数 最小值-2147483648(-231),最大值2147483647(231-1)
    long 64位有符号整数 -263~(263-1)
    float 32位浮点数 1.4E-45~3.4028235E38
    double 64位浮点数 4.9E-324~1.7976931348623157E308
    char 16位Unicode字符 不适用
  • 相关阅读:
    Docker windows下安装,入门及注意事项,并搭建包含Nodejs的webapp
    360浏览器table中的td为空时td边框不显示的解决方法
    关于发布webservice提示The test form is only available for requests from the local machine
    CRM相关SQl手记
    页面右下角弹出的消息提示框
    MS CRM2011 js常用总结
    MVC razor 使用服务器控件
    常用正则表达式
    CRM 2011 常用对象
    人工智能AI-机器视觉CV-数据挖掘DM-机器学习ML-神经网络-[资料集合贴]
  • 原文地址:https://www.cnblogs.com/Raymond-Yang/p/5181517.html
Copyright © 2020-2023  润新知