国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode——兩數(shù)相加

這篇具有很好參考價值的文章主要介紹了LeetCode——兩數(shù)相加。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、兩數(shù)相加

1、題目

2、題目解讀

3、代碼

二、反轉(zhuǎn)鏈表

1、題目

?2、題目解讀

3、代碼?

三、兩數(shù)相加 II

1、題目

2、題目解讀

3、代碼

反轉(zhuǎn)鏈表再進行計算

借助棧


一、兩數(shù)相加

1、題目

2. 兩數(shù)相加 - 力扣(Leetcode)

給你兩個?非空?的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照?逆序?的方式存儲的,并且每個節(jié)點只能存儲?一位?數(shù)字。

請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。

你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0?開頭。

示例 1:

LeetCode——兩數(shù)相加,# 力扣,leetcode,算法,職場和發(fā)展

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.

示例 2:

輸入:l1 = [0], l2 = [0]
輸出:[0]

示例 3:

輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]

提示:

  • 每個鏈表中的節(jié)點數(shù)在范圍?[1, 100]?內(nèi)
  • 0 <= Node.val <= 9
  • 題目數(shù)據(jù)保證列表表示的數(shù)字不含前導(dǎo)零

2、題目解讀

因為題目所給鏈表節(jié)點的范圍是[1,100],所以我們無法通過將兩個鏈表轉(zhuǎn)換成兩個數(shù)再進行計算,然后重新轉(zhuǎn)換成鏈表,數(shù)太大了。

題目說:它們每位數(shù)字都是按照?逆序?的方式存儲的,并且每個節(jié)點只能存儲?一位?數(shù)字。

因此我們就直接進行計算兩個鏈表的值,然后對10進行取模,再進行進位操作。

如下操作:

sum = x + y + carry

carry = sum / 10
sum = sum % 10

還需要注意的是如果最后sum不為0還需要進位,也就是再添加一個節(jié)點。

運行條件:鏈表從頭遍歷到尾,逐位相加 (1)需要保存進位 (2)需要保存結(jié)果
結(jié)束時

  1. 兩個鏈表只要有一個非空就需要往后進行
  2. 如果鏈表遍歷結(jié)束,進位不為0,需要把進位項添加在鏈表后面

3、代碼

java:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
   public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur = pre;
        int carry = 0;
        while(l1 != null || l2 != null) {
            int x = l1 == null ? 0 : l1.val;
            int y = l2 == null ? 0 : l2.val;
            int sum = x + y + carry;

            carry = sum / 10;
            sum = sum % 10;
            cur.next = new ListNode(sum);

            cur = cur.next;
            if(l1 != null)
                l1 = l1.next;
            if(l2 != null)
                l2 = l2.next;
        }
        if(carry == 1) {
            cur.next = new ListNode(carry);
        }
        return pre.next;
    }
}

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 創(chuàng)建一個結(jié)點值為 None 的頭結(jié)點, dummy 和 p 指向頭結(jié)點, dummy 用來最后返回, p 用來遍歷
        dummy = p = ListNode(None)          
        s = 0               # 初始化進位 s 為 0
        while l1 or l2 or s:
            # 如果 l1 或 l2 存在, 則取l1的值 + l2的值 + s(s初始為0, 如果下面有進位1, 下次加上)
            s += (l1.val if l1 else 0) + (l2.val if l2 else 0)  
            p.next = ListNode(s % 10)       # p.next 指向新鏈表, 用來創(chuàng)建一個新的鏈表
            p = p.next                      # p 向后遍歷
            s //= 10                        # 有進位情況則取模, eg. s = 18, 18 // 10 = 1
            l1 = l1.next if l1 else None    # 如果l1存在, 則向后遍歷, 否則為 None
            l2 = l2.next if l2 else None    # 如果l2存在, 則向后遍歷, 否則為 None
        return dummy.next   # 返回 dummy 的下一個節(jié)點, 因為 dummy 指向的是空的頭結(jié)點, 下一個節(jié)點才是新建鏈表的后序節(jié)點

二、反轉(zhuǎn)鏈表

1、題目

206. 反轉(zhuǎn)鏈表 - 力扣(Leetcode)

給你單鏈表的頭節(jié)點?head?,請你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。

示例 1:

LeetCode——兩數(shù)相加,# 力扣,leetcode,算法,職場和發(fā)展

輸入:head = [1,2,3,4,5]
輸出:[5,4,3,2,1]

示例 2:

LeetCode——兩數(shù)相加,# 力扣,leetcode,算法,職場和發(fā)展

輸入:head = [1,2]
輸出:[2,1]

示例 3:

輸入:head = []
輸出:[]

提示:

  • 鏈表中節(jié)點的數(shù)目范圍是?[0, 5000]
  • -5000 <= Node.val <= 5000

?2、題目解讀

鏈表簡單反轉(zhuǎn)

3、代碼?

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre=null;
        ListNode cur=head;
        while (cur!=null){
            ListNode tmp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=tmp;
        }
        return pre;
    }
}

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre = None
        cur = head
        while cur:
            temp = cur.next   # 先把原來cur.next位置存起來
            cur.next = pre
            pre = cur
            cur = temp
        return pre

三、兩數(shù)相加 II

1、題目

給你兩個?非空?鏈表來代表兩個非負整數(shù)。數(shù)字最高位位于鏈表開始位置。它們的每個節(jié)點只存儲一位數(shù)字。將這兩數(shù)相加會返回一個新的鏈表。

你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)字都不會以零開頭。

示例1:

LeetCode——兩數(shù)相加,# 力扣,leetcode,算法,職場和發(fā)展

輸入:l1 = [7,2,4,3], l2 = [5,6,4]
輸出:[7,8,0,7]

示例2:

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[8,0,7]

示例3:

輸入:l1 = [0], l2 = [0]
輸出:[0]

提示:

  • 鏈表的長度范圍為 [1, 100]
  • 0 <= node.val <= 9
  • 輸入數(shù)據(jù)保證鏈表代表的數(shù)字無前導(dǎo) 0

2、題目解讀

這題拆解開來就是上面兩題,先進行鏈表反轉(zhuǎn),然后繼續(xù)兩數(shù)相加。

或者通過棧來完成鏈表上面數(shù)的保存,然后進行計算。

3、代碼

反轉(zhuǎn)鏈表再進行計算
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
   public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre1=null;
        ListNode cur1=l1;
        while (cur1!=null){
            ListNode tmp=cur1.next;
            cur1.next=pre1;
            pre1=cur1;
            cur1=tmp;
        }
        ListNode pre2=null;
        ListNode cur2=l2;
        while (cur2!=null){
            ListNode tmp=cur2.next;
            cur2.next=pre2;
            pre2=cur2;
            cur2=tmp;
        }
        l1=pre1;
        l2=pre2;
        ListNode pre = new ListNode(0);
        ListNode cur = pre;
        int carry = 0;
        while(l1 != null || l2 != null) {
            int x = l1 == null ? 0 : l1.val;
            int y = l2 == null ? 0 : l2.val;
            int sum = x + y + carry;

            carry = sum / 10;
            sum = sum % 10;
            cur.next = new ListNode(sum);

            cur = cur.next;
            if(l1 != null)
                l1 = l1.next;
            if(l2 != null)
                l2 = l2.next;
        }
        if(carry == 1) {
            cur.next = new ListNode(carry);
        }
        
        cur=pre.next;
        pre=null;
        while (cur!=null){
            ListNode tmp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=tmp;
        }
        return pre;
    }
}
借助棧

使用棧區(qū)進行存儲數(shù)字,然后再相加計算。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        while (l1 != null) {
            stack1.push(l1.val);
            l1 = l1.next;
        }
        while (l2 != null) {
            stack2.push(l2.val);
            l2 = l2.next;
        }
        
        int carry = 0;
        ListNode head = null;
        while (!stack1.isEmpty() || !stack2.isEmpty() || carry > 0) {
            int sum = carry;
            sum += stack1.isEmpty()? 0: stack1.pop();
            sum += stack2.isEmpty()? 0: stack2.pop();
            ListNode node = new ListNode(sum % 10);
            node.next = head;
            head = node;
            carry = sum / 10;
        }
        return head;
    }
}

LeetCode——兩數(shù)相加,# 力扣,leetcode,算法,職場和發(fā)展文章來源地址http://www.zghlxwxcb.cn/news/detail-528280.html

到了這里,關(guān)于LeetCode——兩數(shù)相加的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 兩數(shù)相加 LeetCode熱題100

    給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。 建立鏈表l3,同時遍歷兩個鏈表

    2024年02月14日
    瀏覽(16)
  • leetcode 2. 兩數(shù)相加(java)

    leetcode 2. 兩數(shù)相加(java)

    難度 - 中等 leetcode 2. 兩數(shù)相加 給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。

    2024年02月09日
    瀏覽(22)
  • LeetCode-C#-0002.兩數(shù)相加

    該題目來源于LeetCode 如有侵權(quán),立馬刪除。 解法不唯一,如有新解法可一同討論。 0002兩數(shù)相加 給你兩個非空的鏈表,表示兩個非負的整數(shù),它們每位數(shù)字都是按照逆序的方式存儲的,并且每個節(jié)點只能存儲一位數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈

    2024年02月08日
    瀏覽(21)
  • LeetCode | 兩數(shù)相加 C語言

    LeetCode | 兩數(shù)相加 C語言

    Problem: 2. 兩數(shù)相加 主要是一一相加和逆序的方式存儲 先說逆序儲存,看下圖 我們先聲明出指針p和指針q,還有指針head(主要用于return上而已),然后進行一系列操作,之后,p = q,之后的操作就是對q進行,至于p,只做一個動作,p = q 至于相加嘛!好說,將對應(yīng)的兩個數(shù)加起

    2024年02月22日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu) | 鏈表】leetcode 2. 兩數(shù)相加

    【數(shù)據(jù)結(jié)構(gòu) | 鏈表】leetcode 2. 兩數(shù)相加

    個人主頁:兜里游客棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里游客棉花糖 原創(chuàng) 收錄于專欄【LeetCode】 原題鏈接:點擊直接跳轉(zhuǎn)到該題目 給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位

    2024年02月05日
    瀏覽(33)
  • leetcode 445. Add Two Numbers II(兩數(shù)相加)

    leetcode 445. Add Two Numbers II(兩數(shù)相加)

    用鏈表代表2個數(shù)字,這2個數(shù)字相加的和用鏈表返回。 最高位在鏈表的head. 思路: 1.鏈表逆序 數(shù)字相加是從低位到高位的,然而鏈表中的數(shù)字是從高位指向低位。 所以涉及到鏈表的逆序。 逆序之后只需從head到tail把兩個鏈表的數(shù)字相加,再用一個int表示進位。 鏈表的逆序

    2024年02月16日
    瀏覽(26)
  • 2023/07/02_leetcode每日一題_2.兩數(shù)相加

    給你兩個 非空 的鏈表,表示兩個非負的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。 示例: 輸入:l1 = [9,9,9,9,9,9

    2024年02月11日
    瀏覽(21)
  • 力扣---兩數(shù)相加(c語言版)

    力扣---兩數(shù)相加(c語言版)

    ??個人主頁:?? :???初階牛??? ??推薦專欄: ?????? c語言初階 ??個人信條: ??知行合一 ??本篇簡介::記錄一個力扣寫了好久的一個問題 金句分享: ?在心里種花,人生才不會荒蕪!? 題目名稱:兩數(shù)相加(題目來源于力扣) [傳送門] 此題被 進位 問題困擾良久,所以注意

    2023年04月10日
    瀏覽(14)
  • 【力扣 445】兩數(shù)相加 II C++題解(鏈表+模擬+數(shù)學(xué)+頭插法)

    給你兩個 非空 鏈表來代表兩個非負整數(shù)。數(shù)字最高位位于鏈表開始位置。它們的每個節(jié)點只存儲一位數(shù)字。將這兩數(shù)相加會返回一個新的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)字都不會以零開頭。 示例1: 輸入:l1 = [7,2,4,3], l2 = [5,6,4] 輸出:[7,8,0,7] 示例2: 輸入:l

    2024年01月24日
    瀏覽(22)
  • 鏈表存數(shù)相加算法(leetcode第2題)

    鏈表存數(shù)相加算法(leetcode第2題)

    思路: 使用頭尾鏈表節(jié)點指針,用carry來存儲進位值 代碼實現(xiàn):

    2024年01月20日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包