27--字符串相加

文章目錄

  • 1.問題描述
  • 2.代碼詳情

1.問題描述

給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。

注意:
num1 和num2 的長度都小于 5100.
num1 和num2 都只包含數字 0-9.
num1 和num2 都不包含任何前導零。
你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字符串轉換為整數形式。

2.代碼詳情

解題思路
算法流程: 設定 i,j 兩指針分別指向 num1,num2 尾部,模擬人工加法;
計算進位: 計算 carry = tmp // 10,代表當前位相加是否產生進位;
添加當前位: 計算 tmp = n1 + n2 + carry,并將當前位 tmp % 10 添加至 res 頭部;
索引溢出處理: 當指針 i或j 走過數字首部后,給 n1,n2 賦值為 00,相當于給 num1,num2 中長度較短的數字前面填 00,以便后續計算。
當遍歷完 num1,num2 后跳出循環,并根據 carry 值決定是否在頭部添加進位 11,最終返回 res 即可。

復雜度分析:
時間復雜度 O(max(M,N))O(max(M,N)):其中 MM,NN 為 22 數字長度,按位遍歷一遍數字(以較長的數字為準);
空間復雜度 O(1)O(1):指針與變量使用常數大小空間。

java:

package com.fanxindong.String;public class AddString {public String addStrings(String num1, String num2) {StringBuilder res = new StringBuilder("");int i = num1.length() - 1, j = num2.length() - 1, carry = 0;while(i >= 0 || j >= 0){int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;int tmp = n1 + n2 + carry;carry = tmp / 10;res.append(tmp % 10);i--; j--;}if(carry == 1) res.append(1);return res.reverse().toString();}public static void main(String[] args) {String num1 = "123456";String num2 = "123456";AddString addString = new AddString();String result = addString.addStrings(num1,num2);System.out.println(result);}
}

python:

class Solution():def addStrings(self,num1: str, num2: str) -> str:res = ""i, j, carry = len(num1) - 1, len(num2) - 1, 0while i >= 0 or j >= 0:n1 = int(num1[i]) if i >= 0 else 0n2 = int(num2[j]) if j >= 0 else 0tmp = n1 + n2 + carrycarry = tmp // 10res = str(tmp % 10) + resi, j = i - 1, j - 1return "1" + res if carry else resif __name__ == '__main__':S = Solution()num1 = "51189"num2 = "967895"result = S.addStrings(num1,num2)print(result)

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

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

相關文章

[轉] 一文弄懂神經網絡中的反向傳播法——BackPropagation

在看CNN和RNN的相關算法TF實現,總感覺有些細枝末節理解不到位,浮在表面。那么就一點點扣細節吧。 這個作者講方向傳播也是沒誰了,666~ 原文地址:https://www.cnblogs.com/charlotte77/p/5629865.html 最近在看深度學習…

java線程組

線程組 線程組是Java線程編程所持有的概念。在Java中,線程組是指java.lang.ThreadGroup類的對象,每個線程都隸屬于唯一的一個線程組,這個線程組在線程創建時指定并在線程的整個生命周期內都不能更改。可以通過調用包含ThreadGroup類型參數的T…

FreeBSD 8.3 發布

近日,FreeBSD開發團隊放出了8.x穩定分支的8.3版本。此次發行的版本將支持amd64、i386、pc98和 sparc64等處理器類型。FreeBSD是一種類UNIX操作系統,但不是真正意義上的 UNIX 操作系統,它是由經過 BSD、386BSD 和 4.4BSD 發展而來的 Unix 的一…

Java中四種訪問權限總結

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、Java中有四種訪問權限, 其中三種有訪問權限修飾符,分別為private、public、protected,還有一種不…

28--僅僅反轉字母

文章目錄1.問題描述2.代碼詳情1.問題描述 給定一個字符串 S,返回 “反轉后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發生反轉。 示例 1: 輸入:“ab-cd” 輸出:“dc-ba” 示例 2&…

Moving Average

移動平均算法Demo #!/usr/bin/python2.7 # Fetch data from BD and analyse.import json import urllib import traceback import numpy as np # import pandas as pd import matplotlib.pyplot as plt #from scipy import statsdef fetch_raw_data(url):try:response urllib.…

【前端工程師手冊】JavaScript作用域拾遺

【前端工程師手冊】JavaScript作用域拾遺 昨天總結了一些作用域的知識【前端工程師手冊】JavaScript之作用域,但是發表完發現忘記了一些東西,今天拾個遺。 昨天說到了JavaScript中沒有塊級作用域,其實在es6中是有的。 es6中的塊級作用域 先舉…

游戲開發中的數據表示

聲明:本文內容源自騰訊游戲學院程序公開課_服務端 一、數據表示的基礎 什么是數據表示? 數據是信息的載體。 數據表示是一組操作,可以描述、顯示、操作信息。 數據表示的要素 IDL - 接口描述語言 IDL是用來描述軟件組件接口的一種計算機語言。…

29--反轉字符串

文章目錄1.問題描述2.代碼詳情1.問題描述 編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 你可以假設數組中…

什么是臨界區

臨界區[1] 指的是一個訪問共用資源(例如:共用設備或是共用存儲器)的程序片段,而這些共用資源又無法同時被多個 線程 訪問的特性。當有線程進入臨界區段時,其他線程或是 進程 必須等待(例如:bo…

BZOJ 2957 樓房重建 (分塊)

題解:分塊,然后暴力維護每一塊上升序列,注意是不是最長上升序列,二分查找第二塊中大于第一塊的最后一個上升序列中的數。 注意:每一塊的大小不要用√n會T掉的,把塊的大小設為500-600都可以(T了一…

OpenBSD 5.1 正式版發布

OpenBSD 開發團隊于近日發布了 5.1 正式版。 OpenBSD是一個從NetBSD衍生出來的類Unix操作系統。項目領導人Theo de Raadt在1995年發起了OpenBSD項目,希望創造一個注重安全的操作系統,此外OpenBSD也以高品質的文件、堅持開放程式碼以及嚴格的軟件授權著名…

Spring事務傳播行為7種類型 --- 看一遍就能記住!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、Spring 事務傳播行為一共有7種類型,主要分為3類: 1)支持當前事物、 2)不支持當前事…

PowerShell變量——PowerShell三分鐘(七)

有了前面的PowerShell基礎,今天我們來學習一個可以極大提升PowerShell效率的用法——變量簡答來說呢,變量就是在內存中的一個帶有名字的盒子~~~~~你可以把所有想存放的東西都放到這個“盒子”里。然后通過名字去訪問這個盒子。在訪問過程中,可…

Machine Learning - Coursera week6 Evaluating a learning algorithm

Evaluating a learning algorithm 1. Design what to do next 在預測房價的學習例子,假如你已經完成了正則化線性回歸,也就是最小化代價函數J的值。假如在你得到你的學習參數以后把它應用到放到一組新的房屋樣本上進行測試,發現在預測房價時產…

Tiny Core Linux 4.5 發布,微型 Linux 操作系統

世界上最小的Linux桌面發行版——Tiny Core Linux 今天發布了4.5版本。Tiny Core Linux是一個基于Linux2.6版本內核,采用BusyBox、Tiny X、FLTK 和其它小型軟件構筑的帶圖形用戶界面的微型Linux操作系統。由于體積很小,大約10MB,故采用整體裝…

30-- 返回倒數第 k 個節點

文章目錄1.問題描述2.代碼詳情1.問題描述 實現一種算法,找出單向鏈表中倒數第 k 個節點。返回該節點的值。 輸入: 1->2->3->4->5 和 k 2 輸出: 4 2.代碼詳情 設置快和慢兩個指針,初始化時快指針比慢指針多走k-1步…

maven的web工程打包為war并部署到服務器

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.在maven工程上右鍵 --> export --> 選擇WAR file --> next 2. 點擊Browse... 選擇導出后存放位置 3. 將工程名改為ROOT.war…

使用線程池的好處

第一:降低資源消耗。通過重復利用已創建的線程降低線程創建和銷毀造成的消耗。第二:提高響應速度。當任務到達時,任務可以不需要等到線程創建就能立即執行。第三:提高線程的可管理性。線程是稀缺資源,如果無限制的創建…

5.19 - Stacks and Queues

Decode Stringk[encoded_string] 的編碼字符串,將編碼的字符重復k次,最后打印出一個完整的字符串。 思路:使用棧結構,由里層向外層,層層解碼,當遇到了[ 字符時,向stack當中添加元素,…