反璞歸真 DFS模擬鏈結串列的四則運算。 Leetcode #2816

閱讀時間約 6 分鐘

題目敘述

輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數

要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案


原本的英文題目敘述


測試範例

Example 1:

Input: head = [1,8,9]
Output: [3,7,8]
Explanation: The figure above corresponds to the given linked list which represents the number 189. Hence, the returned linked list represents the number 189 * 2 = 378.

Example 2:

Input: head = [9,9,9]
Output: [1,9,9,8]
Explanation: The figure above corresponds to the given linked list which represents the number 999. Hence, the returned linked list reprersents the number 999 * 2 = 1998.

約束條件

Constraints:

  • The number of nodes in the list is in the range [1, 10^4]

節點總數目介於 1 ~ 一萬之間。

  • 0 <= Node.val <= 9

每個節點值都介於0~9之間。

  • The input is generated such that the list represents a number that does not have leading zeros, except the number 0 itself.

題目保證不會有leading zero。


演算法 DFS模擬直覺算法

反璞歸真,其實用DFS模擬平常我們四則運算的方式就可以了。

某個數字乘以二,會怎麼做?

就是用二去乘以每一位,從個位數 ~ 最高位


實作上有一個細節要留意:
計算的時候,記得有進位時,要傳遞到下一個比較高的位數


程式碼 DFS模擬直覺算法

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def doubleIt(self, head: Optional[ListNode]) -> Optional[ListNode]:

# Our calculation naturally goes from LSB to MSB, aka from right to left
# This fits the property of DFS + recurion with Last In - First Oout
# We add carryIn and multiply 2 from single digit, tenths, hundreds, ... to leading digit
def compute(node):

## Base case: Empty node = termination
if not node:
return 0, None

# Compute from right to left
carryIn, neighbor_node = compute(node.next)

# Connect next digit
node.next = neighbor_node

# Handle carryIn and current digit sum with x 2
carryIn, digit = divmod( (node.val << 1) + carryIn , 10)
node.val = digit

# Propogate carryIn and myself to lefthand side
return carryIn, node

# --------------------------------

# Get leading term
carryIn, node = compute(head)

# Do we have carryIn after x 2 ?
# If yes, then carryIn is new leading term.
if carryIn:
return ListNode(carryIn, node)

# If no, then original head node is leading term.
else:
return node

複雜度分析

時間複雜度: O(n)

從個位數 計算到 最高位,每一位都進行乘以二的計算,並且把進位傳到下一個比較高的位數。


空間複雜度: O(n)

最大遞迴深度剛好就是有幾位數,n位數的數字最深遞迴深度恰好為O(n)。


關鍵知識點

某個數字乘以二,會怎麼做?

就是用二去乘以每一位,從個位數 ~ 最高位


實作上有一個細節要留意:

計算的時候,記得有進位時,要傳遞到下一個比較高的位數


Reference

[1] Double a Number Represented as a Linked List - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
今天的一魚三吃系列是透過 兩點之間是否存在一條路徑的題目,來回顧以前學過的DFS、BFS和Disjoint Set,鞏固圖論演算法的知識點。 英文的題目敘述在這裡 題目敘述 給定我們已知n個節點的圖,和圖上的每一條無向邊edges。 請問給定的起點start和終點end是否存在一條路徑可
今天的官方每日一題是Island Perimeter島嶼周長,很有趣的一題。 題目非常直觀好懂。也很適合拿來作為多角度複習、回顧圖論演算法的好題目。 英文的題目敘述在這裡 題目敘述 題目會給我們一個二維陣列當作地圖,格子點為1代表陸地,格子點為0代表海洋。 要求我們以四連通N4的方式拜訪
題目敘述 題目會給定一顆二元樹的根結點, 要求我們在指定的層樹d,插入新的一層,節點值為v。 原本的左、右子樹,就成為新的那一層的左子樹、右子樹。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,6,3,1,5], val = 1, depth =
這篇文章,會帶著大家複習以前學過的DFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): # 邊界條件 if base case or stop cond
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
今天的一魚三吃系列是透過 兩點之間是否存在一條路徑的題目,來回顧以前學過的DFS、BFS和Disjoint Set,鞏固圖論演算法的知識點。 英文的題目敘述在這裡 題目敘述 給定我們已知n個節點的圖,和圖上的每一條無向邊edges。 請問給定的起點start和終點end是否存在一條路徑可
今天的官方每日一題是Island Perimeter島嶼周長,很有趣的一題。 題目非常直觀好懂。也很適合拿來作為多角度複習、回顧圖論演算法的好題目。 英文的題目敘述在這裡 題目敘述 題目會給我們一個二維陣列當作地圖,格子點為1代表陸地,格子點為0代表海洋。 要求我們以四連通N4的方式拜訪
題目敘述 題目會給定一顆二元樹的根結點, 要求我們在指定的層樹d,插入新的一層,節點值為v。 原本的左、右子樹,就成為新的那一層的左子樹、右子樹。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,6,3,1,5], val = 1, depth =
這篇文章,會帶著大家複習以前學過的DFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): # 邊界條件 if base case or stop cond
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
白建宇獻給相信平凡中仍有幸福的人的莫札特之夜。
Thumbnail
此文章用生成式圖像製作成動畫影像,描述了一位女子在自然和都市生活中的變遷。她在繁華的都市中迷失自我,最終回歸自然尋找生命的意義和價值。
Thumbnail
《刺客教條:幻象》在相隔三年後終於面世了,故事來到巴格達,主角是《刺客教條:維京紀元》的埃沃爾的老師貝辛姆的起源故事。身為一個《刺客教條》系列的信徒,當然這次也是二話不說就買單。這一代的幻象,老玩家都說有種返樸歸真的感覺,這句話聽在老玩家耳中,就是一言道破,既是優點也是缺點,這是怎麼回事呢?
Thumbnail
立書必須在牆面上書寫,用筆是很困難的,在牆面上寫字時,筆尖會因重力下垂而難以打開,若想要寫出粗線條必須用不同的用筆方式。
Thumbnail
不管是朝陽、星辰、雲霧、或一顆寧靜自立的樹,從山林的靜靜傾聽中,領悟未曾正面直視的自己。在長年累月的特殊景觀中,收穫更自在而舒心的自我。一起發掘台灣原始生活的純樸浪漫,透過森林療癒、透過人與人之間的自在相處,重新理解這片土地的單純與美好。(https://www.peopo.org/chongpol
Thumbnail
生產,可以不剪會陰嗎? 即使我在「生產計畫書」寫上尊重醫生決定,但是,內心還是希望生產不要有任何手術傷口,然而,在奮力生完孩子後,才有力氣看著醫生,卻是拿著沾血的線縫著下體。我知道,我被剪會陰了。 會陰傷口的微疼,在坐月子時很有存在感,只要一跨步,就會感覺到下體有一處在拉扯。 因為不剪會撕裂地很糟糕
Thumbnail
㚕磬擁有與生俱來的創作天賦,更富含深厚的美學涵養,將東西方藝術與文學兼容並蓄,雜揉於其創作之中,從細節裡形塑生命之美,把真實的自己完全展露,讓靈魂透過作品映襯出跨越時空的心靈共感,在見微知著裡照見承先啟後的傳承與創新。㚕磬利用青瓷釉色與現代㚕磬冰裂釉作為根基,汲取自身的生命經驗鏈結時空軌跡,才是成就
Thumbnail
日復一日,我們一直朝著許多「目標」努力,這些目標大多源自於大人的引導,含括勵志的寓言故事和偉人傳記等,建構出所謂「光明未來」或「幸福快樂的生活」的表象。懵懂之間,我們接受了這些目標設定,來自爸媽的期待、老師的標準、老闆的要求、社會的框架,只是這些目標真的是你想要的嗎? 倘若不是自己決定,就可能在時光
Thumbnail
André and his Olive Tree 2018年初,江振誠在新加坡的米其林二星餐廳Restaurant ANDRÉ停業,引起餐飲界一片譁然。許多人為他的餐廳距離三星僅一步之遙感到可惜,他卻認為達到巔峰,應該回歸初心省視自己。 和許多人一樣,在還不懂美食的年齡,第一次認識的他是「江宏恩的
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
白建宇獻給相信平凡中仍有幸福的人的莫札特之夜。
Thumbnail
此文章用生成式圖像製作成動畫影像,描述了一位女子在自然和都市生活中的變遷。她在繁華的都市中迷失自我,最終回歸自然尋找生命的意義和價值。
Thumbnail
《刺客教條:幻象》在相隔三年後終於面世了,故事來到巴格達,主角是《刺客教條:維京紀元》的埃沃爾的老師貝辛姆的起源故事。身為一個《刺客教條》系列的信徒,當然這次也是二話不說就買單。這一代的幻象,老玩家都說有種返樸歸真的感覺,這句話聽在老玩家耳中,就是一言道破,既是優點也是缺點,這是怎麼回事呢?
Thumbnail
立書必須在牆面上書寫,用筆是很困難的,在牆面上寫字時,筆尖會因重力下垂而難以打開,若想要寫出粗線條必須用不同的用筆方式。
Thumbnail
不管是朝陽、星辰、雲霧、或一顆寧靜自立的樹,從山林的靜靜傾聽中,領悟未曾正面直視的自己。在長年累月的特殊景觀中,收穫更自在而舒心的自我。一起發掘台灣原始生活的純樸浪漫,透過森林療癒、透過人與人之間的自在相處,重新理解這片土地的單純與美好。(https://www.peopo.org/chongpol
Thumbnail
生產,可以不剪會陰嗎? 即使我在「生產計畫書」寫上尊重醫生決定,但是,內心還是希望生產不要有任何手術傷口,然而,在奮力生完孩子後,才有力氣看著醫生,卻是拿著沾血的線縫著下體。我知道,我被剪會陰了。 會陰傷口的微疼,在坐月子時很有存在感,只要一跨步,就會感覺到下體有一處在拉扯。 因為不剪會撕裂地很糟糕
Thumbnail
㚕磬擁有與生俱來的創作天賦,更富含深厚的美學涵養,將東西方藝術與文學兼容並蓄,雜揉於其創作之中,從細節裡形塑生命之美,把真實的自己完全展露,讓靈魂透過作品映襯出跨越時空的心靈共感,在見微知著裡照見承先啟後的傳承與創新。㚕磬利用青瓷釉色與現代㚕磬冰裂釉作為根基,汲取自身的生命經驗鏈結時空軌跡,才是成就
Thumbnail
日復一日,我們一直朝著許多「目標」努力,這些目標大多源自於大人的引導,含括勵志的寓言故事和偉人傳記等,建構出所謂「光明未來」或「幸福快樂的生活」的表象。懵懂之間,我們接受了這些目標設定,來自爸媽的期待、老師的標準、老闆的要求、社會的框架,只是這些目標真的是你想要的嗎? 倘若不是自己決定,就可能在時光
Thumbnail
André and his Olive Tree 2018年初,江振誠在新加坡的米其林二星餐廳Restaurant ANDRÉ停業,引起餐飲界一片譁然。許多人為他的餐廳距離三星僅一步之遙感到可惜,他卻認為達到巔峰,應該回歸初心省視自己。 和許多人一樣,在還不懂美食的年齡,第一次認識的他是「江宏恩的