【leet-code清晰解题思路💯✅】43. 字符串相乘

47 阅读1分钟

题目描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意: 不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字组成。
  • num1 和 num2 都不包含任何前导零,除了数字0本身。

解题思路

  • 就像我们小学学的乘法的步骤,两重for循环去相乘相加即可。这里为了简化进位操作,第一遍枚举的是答案的位数,从低到高。
package main

func trap(height []int) int {
   maxh := 0
   for i := 0; i < len(height); i++ {
      maxh = max(maxh, height[i])
   }
   ans := 0
   l, r := 0, len(height)-1
   tmpm := height[0]
   for ; l < len(height); l++ {
      if height[l] == maxh {
         break
      }
      if height[l] < tmpm {
         ans += tmpm - height[l]
      }
      tmpm = max(tmpm, height[l])
   }
   tmpm = height[len(height)-1]
   for ; r >= l; r-- {
      if height[r] == maxh {
         break
      }
      if height[r] < tmpm {
         ans += tmpm - height[r]
      }
      tmpm = max(tmpm, height[r])
   }
   for ; l <= r; l++ {
      if height[l] < maxh {
         ans += maxh - height[l]
      }
   }
   return ans
}

//func max(a, b int) int {
// if a > b {
//    return a
// }
// return b
//}