题目描述
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意: 不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
提示:
1 <= num1.length, num2.length <= 200num1和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
//}