成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

每日算法:字符串相乘

開發(fā) 前端 算法
給定兩個以字符串形式表示的非負(fù)整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。

[[421393]]

本文轉(zhuǎn)載自微信公眾號「三分鐘學(xué)前端」,作者sisterAn。轉(zhuǎn)載本文請聯(lián)系三分鐘學(xué)前端公眾號。

給定兩個以字符串形式表示的非負(fù)整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。

示例 1:

  1. 輸入: num1 = "2", num2 = "3" 
  2. 輸出: "6" 

示例 2:

  1. 輸入: num1 = "123", num2 = "456" 
  2. 輸出: "56088" 

說明:

  • num1 和 num2 的長度小于110。
  • num1 和 num2 只包含數(shù)字 0-9。
  • num1 和 num2 均不以零開頭,除非是數(shù)字 0 本身。
  • 不能使用任何標(biāo)準(zhǔn)庫的大數(shù)類型(比如 BigInteger)或直接將輸入轉(zhuǎn)換為整數(shù)來處理。

解法一:常規(guī)解法

從右往左遍歷乘數(shù),將乘數(shù)的每一位與被乘數(shù)相乘得到對應(yīng)的結(jié)果,再將每次得到的結(jié)果累加

另外,當(dāng)乘數(shù)的每一位與被乘數(shù)高位(非最低位)相乘的時候,注意低位補(bǔ) '0'

  1. let multiply = function(num1, num2) { 
  2.     if (num1 === "0" || num2 === "0"return "0" 
  3.      
  4.     // 用于保存計(jì)算結(jié)果 
  5.     let res = "0" 
  6.          
  7.     // num2 逐位與 num1 相乘 
  8.     for (let i = num2.length - 1; i >= 0; i--) { 
  9.         let carry = 0 
  10.         // 保存 num2 第i位數(shù)字與 num1 相乘的結(jié)果 
  11.         let temp = '' 
  12.         // 補(bǔ) 0  
  13.         for (let j = 0; j < num2.length - 1 - i; j++) { 
  14.             temp+='0' 
  15.         } 
  16.         let n2 = num2.charAt(i) - '0' 
  17.              
  18.         // num2 的第 i 位數(shù)字 n2 與 num1 相乘 
  19.         for (let j = num1.length - 1; j >= 0 || carry != 0; j--) { 
  20.             let n1 = j < 0 ? 0 : num1.charAt(j) - '0' 
  21.             let product = (n1 * n2 + carry) % 10 
  22.             temp += product  
  23.             carry = Math.floor((n1 * n2 + carry) / 10) 
  24.         } 
  25.         // 將當(dāng)前結(jié)果與新計(jì)算的結(jié)果求和作為新的結(jié)果 
  26.         res = addStrings(res, Array.prototype.slice.call(temp).reverse().join("")) 
  27.     } 
  28.     return res 
  29.  
  30. let addStrings = function(num1, num2) { 
  31.     let a = num1.length, b = num2.length, result = '', tmp = 0 
  32.     while(a || b) { 
  33.         a ? tmp += +num1[--a] : '' 
  34.         b ? tmp +=  +num2[--b] : '' 
  35.          
  36.         result = tmp % 10 + result 
  37.         if(tmp > 9) tmp = 1 
  38.         else tmp = 0 
  39.     } 
  40.     if (tmp) result = 1 + result 
  41.     return result 

復(fù)雜度分析:

  • 時間復(fù)雜度:O(max(m*n , n * n))
  • 空間復(fù)雜度:O(m+n)

解法二:豎式相乘(優(yōu)化)

兩個數(shù)M和N相乘的結(jié)果可以由 M 乘上 N 的每一位數(shù)的和得到 ,如下圖所示:

  • 計(jì)算 num1 依次乘上 num2 的每一位的和
  • 把得到的所有和按對應(yīng)的位置累加在一起,就可以得到 num1 * num2 的結(jié)果
  1. let multiply = function(num1, num2) { 
  2.     if(num1 === '0' || num2 === '0'return "0" 
  3.      
  4.     // 用于保存計(jì)算結(jié)果 
  5.     let res = [] 
  6.      
  7.     // 從個位數(shù)開始逐位相乘 
  8.     for(let i = 0 ; i < num1.length; i++){ 
  9.         // num1 尾元素 
  10.         let tmp1 = +num1[num1.length-1-i] 
  11.          
  12.         for(let j = 0; j < num2.length; j++){ 
  13.             // num2尾元素 
  14.             let tmp2 = +num2[num2.length-1-j] 
  15.              
  16.             // 判斷結(jié)果集索引位置是否有值 
  17.             let pos = res[i+j] ? res[i+j]+tmp1*tmp2 : tmp1*tmp2 
  18.             // 賦值給當(dāng)前索引位置 
  19.             res[i+j] = pos%10 
  20.             // 是否進(jìn)位 這樣簡化res去除不必要的"0" 
  21.             pos >=10 && (res[i+j+1]=res[i+j+1] ? res[i+j+1]+Math.floor(pos/10) : Math.floor(pos/10)); 
  22.         } 
  23.     } 
  24.     return res.reverse().join(""); 

復(fù)雜度分析:

 

  • 時間復(fù)雜度:O(m * n)
  • 空間復(fù)雜度:O(m + n)

 

責(zé)任編輯:武曉燕 來源: 三分鐘學(xué)前端
相關(guān)推薦

2021-09-10 08:31:54

翻轉(zhuǎn)字符串單詞

2021-08-26 05:08:25

相鄰重復(fù)項(xiàng)算法

2021-09-02 09:22:13

算法無重復(fù)字符

2023-02-26 22:33:32

字符串排列算法

2021-11-12 09:44:03

字符串算法復(fù)雜度

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2016-12-30 13:32:24

字符串算法代碼

2023-04-11 08:54:57

字符串匹配算法

2016-12-30 13:16:51

字符串算法代碼

2013-05-06 10:49:21

Boyer-Moore算法字符串匹配

2009-08-11 10:26:49

C#算法C#字符串反轉(zhuǎn)

2024-07-03 11:23:14

2016-12-30 13:37:50

字符串算法代碼

2021-12-21 11:39:01

數(shù)據(jù)結(jié)構(gòu)算法同構(gòu)字符串

2009-06-23 14:13:00

Java字符串

2024-04-01 08:41:39

字符串.NET

2010-09-09 11:48:00

SQL函數(shù)字符串

2014-01-02 16:14:10

PostgreSQL字符串

2009-07-16 17:01:09

Swing字符串
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久香蕉国产线看观看亚洲 | 人人九九精| 国产成人免费视频网站视频社区 | 久久久精品一区 | 成人免费视频一区 | 久久久久久国产精品三区 | 国产精品久久久久久久久久久久久 | 精品99在线| 亚洲欧洲精品成人久久奇米网 | 国产精品久久久亚洲 | 亚洲人成网亚洲欧洲无码 | 成人免费视频网站在线观看 | 国产不卡视频 | 欧洲一级视频 | 成人免费观看视频 | 国产精品成av人在线视午夜片 | 红桃成人在线 | 久久男女视频 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 亚洲精品一二三 | 国产欧美视频一区二区 | 一区二区福利视频 | 老头搡老女人毛片视频在线看 | 97色免费视频 | 91欧美 | 欧美老少妇一级特黄一片 | 一本岛道一二三不卡区 | 超碰人人人 | 成人精品一区二区三区 | 狠狠天天 | 免费一区二区三区 | 国产精品亚洲成在人线 | 正在播放国产精品 | 日韩视频在线观看 | 亚洲欧美激情精品一区二区 | 亚洲超碰在线观看 | 天天操狠狠操 | 亚洲第一视频网 | 欧美99| 久久精品久久久久久 | 色橹橹欧美在线观看视频高清 |