兩數相加 - (LeetCode)

前言

今天無意間看到LeetCode的一道“兩數相加”的算法題,第一次接觸鏈表ListNode,ListNode結構如下:

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;}}

算法題目

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

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

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

示例 1:

輸入: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]

提示:

  • 每個鏈表中的節點數在范圍?[1, 100]?內
  • 0 <= Node.val <= 9
  • 題目數據保證列表表示的數字不含前導零

解題思路

使用迭代的方法來實現鏈表的相加。從兩個鏈表的頭節點開始,依次將對應位置的數字相加,并保留進位。在遍歷完兩個鏈表的所有節點之后,如果還存在進位,就需要在結果鏈表中追加一個節點來存儲進位。

第一版代碼

/*** 兩數相加*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {StringBuilder s = new StringBuilder();while (l1 != null) {s.append(l1.val);l1 = l1.next;}StringBuilder s1 = new StringBuilder();for (int i = s.toString().length(); i > 0; i--) {s1.append(s.toString().charAt(i - 1));}long x1 = Long.parseLong(s1.toString());s = new StringBuilder();while (l2 != null) {s.append(l2.val);l2 = l2.next;}s1 = new StringBuilder();for (int i = s.toString().length(); i > 0; i--) {s1.append(s.toString().charAt(i - 1));}long x2 = Long.parseLong(s1.toString());long sum = x1 + x2;//結果倒序s1 = new StringBuilder();for (int i = String.valueOf(sum).length(); i > 0; i--) {s1.append(String.valueOf(sum).charAt(i - 1));}//返回鏈表ListNode listNode = new ListNode(Integer.parseInt(s1.substring(0, 1)));ListNode p = listNode;//聲明一個變量在移動過程中充當節點for (int i = 1; i < s1.toString().length(); i++) {p.next = new ListNode(Integer.parseInt(s1.substring(i, i + 1)));    //創建鏈表的下一個節點,并賦值p = p.next;    //將指針的位置指向當前節點}return listNode;}

注意:萬萬沒有想到,在LeetCode通過測試,但是提交的時候,卻被一個長鏈表被給卡主了,查看了錯誤,發現是超出了long的長度,不能用傳統的方法來解決,只能通過每一位數的相加,然后進位進行循環計算和進位處理。

經過思考和優化,最后優化代碼如下,順利提交LeetCode通過所有的測試用例。

最終實現代碼

/*** 兩數相加*/public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode ln = l1;ListNode lx = l2;StringBuilder res = new StringBuilder();int val = 0;while (ln != null || lx != null) {int x = (ln != null) ? ln.val : 0;int y = (lx != null) ? lx.val : 0;int sum = x + y + val;if (sum >= 10) {//大于10res.append(sum % 10);//下一次運算+Nval = sum / 10;} else {//小于10res.append(sum);//清空進位val = 0;}//下一個ln = ln != null ? ln.next : null;lx = lx != null ? lx.next : null;}if (val > 0) {//結果有進位res.append(val);}//返回鏈表ListNode listNode = new ListNode(Integer.parseInt(res.substring(0, 1)));ListNode p = listNode;//聲明一個變量在移動過程中充當節點for (int i = 1; i < res.toString().length(); i++) {p.next = new ListNode(Integer.parseInt(res.substring(i, i + 1)));//創建鏈表的下一個節點,并賦值p = p.next;    //將指針的位置指向當前節點}return listNode;}

📚學習永無止境,每天進步一點點,向知識的海洋更深處探索。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11975.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11975.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11975.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用openssl生成自簽名證書

使用openssl生成自簽名證書 1. 交互式生成2. 一步生成參考 1. 交互式生成 自簽名 SSL 證書的生成涉及一個簡單的 3 步過程&#xff1a; 步驟 1&#xff1a;創建服務器私鑰 openssl genrsa -out cert.key 2048步驟 2&#xff1a;創建證書簽名請求 (CSR) openssl req -new -k…

Sectigo SSL證書申請的流程是怎樣的?

在當今數字化時代&#xff0c;網絡安全成為了一個不可忽視的問題。為了保護網站和用戶數據的安全&#xff0c;SSL證書成為了網站運營的重要組成部分。Sectigo作為全球領先的數字證書頒發機構之一&#xff0c;提供了一系列的證書解決方案來滿足不同類型網站的需求。以下是對Sect…

2024年算法建模與計算機通信國際學術會議(ICAMCC 2024)

2024年算法建模與計算機通信國際學術會議(ICAMCC 2024) 2024 International Conference on Algorithm Modeling and Computer Communication(ICAMCC 2024) 會議簡介&#xff1a; 2024年算法建模與計算機通信國際學術會議(ICAMCC 2024)將于中國南昌市盛大開幕。這次會議的目的是…

IP應用場景查詢API接口

IP應用場景查詢API接口指的是輸入IP地址&#xff0c;查詢IP應用場景信息。那么IP地址應用場景查詢接口如何對接呢&#xff1f; 首先我們找到一家有IP地址應用場景查詢API的服務商數脈API,然后注冊賬號&#xff0c;購買免費套餐 接下來就需要技術同學把IP應用場景查詢接口對接到…

數學符號大全

目錄 高數數學符號 科研論文常見數學符號極其含義 圓中間有個點代表點乘 高數數學符號 高數數學符號and數學運算符號及含義 - 知乎 科研論文常見數學符號極其含義 科研中論文常見數學符號及其含義&#xff08;科研必備&#xff0c;建議收藏&#xff09;_數學論文中的:-CSDN…

python GUI庫 EEL + VUE.js 開發環境配置 聯調

eel開發環境啟動的服務器默認端口是8000&#xff0c;如果前端界面的開發也是直接在EEL開發環境中進行&#xff0c;一切好辦。但如果前端用vue&#xff0c;則需要另外啟動專用的vue開發環境的服務器&#xff08;Vue CLI (npm run serve)默認端口是8080&#xff0c;Vite (npm run…

CentOS7中如何docker-compose

在 CentOS 7 上安裝 docker-compose 需要幾個步驟 步驟 1: 安裝 Docker 首先&#xff0c;確保你已經安裝了 Docker。如果沒有安裝&#xff0c;可以通過以下命令安裝&#xff1a; sudo yum update -y sudo yum install -y yum-utils sudo yum-config-manager --add-repo http…

攻防世界(CTF)~web-supersqli(詳細解題思路)

題目介紹 題目描述“隨便注” 先看一下是否存在注入 判斷閉合方式 輸入1’ and 11-- -正常回顯 輸入1and 12-- -無回顯,確認是單引號閉合 看一下列數 輸入1 order by 2-- - 有回顯 輸入1 order by 3-- - 報錯&#xff0c;由此判斷兩列 使用union聯合注入發現select被過濾了&a…

WMS倉儲管理系統如何讓倉庫管理有過程

在當今競爭激烈的商業環境中&#xff0c;WMS倉儲管理系統的智能化與過程化管理顯得尤為重要。一個具有過程管理的WMS倉儲管理系統不僅能夠幫助企業實時監控、分析和調度倉庫作業&#xff0c;還能顯著提升作業效率和成本控制能力。下面&#xff0c;我們就來深入探討一下這種“有…

流媒體zlmediakit

目標&#xff1a; 流媒體部署 內容&#xff1a; 使用開源流媒體zlmediakit docker搭建&#xff1a; docker run -d -p 10000:10000 -p 10000:10000/udp -p 1935:1935 -p 8080:80 -p 8554:554 -p 8443:443 -p 8000:8000/udp -p 9000:9000/udp -p 30000-30050:30000-30050…

IT Tools

vs & vscode工具 Vs Extensions & Remote Development Vs Extensions Remote-SSH VSCode遠程連接到Linux并實現免密碼登錄 Git Graph C cppreference.com cplusplus 鏡像站點 用于下載 QT, Ubuntu, 清華鏡像站點 CMake Download Documents Cmake 構建QT …

IO系列(三) - 文件讀寫操作介紹

一、摘要 在之前的文章中&#xff0c;我們了解到在 Java I/O 體系中&#xff0c;File 類是唯一代表磁盤文件本身的對象。 File 類定義了一些與平臺無關的方法來操作文件&#xff0c;包括檢查一個文件是否存在、創建、刪除文件、重命名文件、判斷文件的讀寫權限是否存在、設置…

撳針在醫保上叫什么?

點擊文末領取撳針的視頻教程跟直播講解 創新型皮內針&#xff08;撳針&#xff09;——醫保甲類產品 皮內針&#xff08;撳針&#xff09;技術屬于重點推廣的中醫適宜技術&#xff0c;是將特制的小型針具固定于腧穴部位的皮內或皮下做較長時間留針的一種方法&#xff0c;稱“…

2024年 C++音視頻開發學習路線(ffmpeg/rtsp/srs/webrtc/hls)

在音視頻工作領域&#xff0c;很多人可能會陷入徘徊和迷茫的境地。音視頻的知識紛繁復雜&#xff0c;自己學習非常困難&#xff0c;既需要非常扎實的基礎知識&#xff0c;又需要有很多的工程經驗&#xff1b;不知道如何學&#xff0c;怎樣才能查漏補缺自己的技術短板。 對于音…

QT C++ widget layout 嵌套 例子2

在上篇文章中描述了實中套虛&#xff08;用setLayout&#xff09;&#xff0c;虛中套實&#xff08;用addWidget&#xff09;。 本文再加1條&#xff0c;虛中套虛&#xff08;用addLayout&#xff09;。 所謂虛中套虛&#xff0c;是layout 套 layout 。 另外用循環代碼生成從…

記錄接口請求偶發504 Gateway Time-out問題

項目場景&#xff1a; 我們將服務部署到A公司服務器中&#xff0c;使用了共五臺服務器&#xff0c;分別是&#xff1a;1.NG服務器 2.日志服務器 3.緩存服務器 4.應用服務器1 5.應用服務器2 。而請求過來首先到達的是他們的物理代理服務器&#xff0c;然后再轉發請求到我們的ng…

【Neo4jJDK開箱即用的安裝全流程】

neo4j:命令行本地訪問loclhost neo4j:命令行本地訪問loclhost2 neo4j操作 Neo4j桌面版數據庫導出導入 Neo4j安裝與配置以及JDK安裝與配置教程&#xff08;超詳細&#xff09; Neo4j 安裝、使用教程 Neo4j安裝教程 Neo4J桌面版的配置和連接Pycharm jdk-neo對應版本 JDK ORACLE中…

數據結構(四)————二叉樹和堆(中)

制作不易&#xff0c;三連支持一下唄&#xff01;&#xff01;&#xff01; 文章目錄 前言一、堆的概念及結構二、堆的實現三.堆的應用 總結 前言 CSDN 這篇博客介紹了二叉樹中的基本概念和存儲結構&#xff0c;接下來我們將運用這些結構來實現二叉樹 一、堆的概念及結構 1…

招聘公司要求跳槽時間間隔不能太短,我的簡歷不符合要求,怎么辦?

很多招聘公司要求就很奇葩,什么三五原則,什么二一原則,意思就是,你幾年內,不能在超過幾家公司內任職。你就說多奇葩啊,他們都不能保證自己的員工在自己公司干多久,甚至裁掉剛干了半年的員工,也是他們干出來的事,然后他們還好意思有這種奇葩要求。 目錄 1 虛假的雙向選…

OpenPCDet算法的網絡結構及工作原理

OpenPCDet是一個用于三維點云目標檢測的開源算法庫。它提供了完整的目標檢測流程&#xff0c;包括數據預處理、網絡模型、損失函數、后處理等。OpenPCDet基于PyTorch框架實現&#xff0c;并針對點云數據進行了深度優化&#xff0c;以實現高效的目標檢測和定位。 OpenPCDet的目…