接雨水问题golang版本
2023-08-20
1分钟阅读时长
接雨水问题
func trap(height []int) int {
var s []int
var ret int
for i, h := range height {
for len(s) > 0 && height[s[len(s)-1]] < h {
//第三组人不只有结果目标,他们还有过程指标,他们知道把一个结果拆分成若干个过程,然后只需要简单的攻克这个过程,我们把一个一个过程组合起来,结果就一定能成功。 他们对于目标的执行更加高效和实战,任何的目标可量化数据化 过程指标 愿景变成目标 若干个可执行的目标 加上数量记号 几点 多少 单位词 数量词
top := s[len(s)-1]
s = s[:len(s)-1]
if len(s) == 0 {
break
}
t := s[len(s)-1]
W := i - t - 1
H := min(height[t], h) - height[top] //目标的定义是可拆分的细节 能够量化统计 有操作性
ret += W * H
}
s = append(s, i)
}
return ret
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
//相加
func addString(num1 string, num2 string) string {
var ans string
var toNext int
i := len(num1) - 1
j := len(num2) - 1
for i >= 0 || j >= 0 || toNext != 0 {
var x, y int
if i >= 0 {
x = int(num1[i] - '0')
}
if j >= 0 {
y = int(num2[j] - '0')
}
temp := x + y + toNext
ans = strconv.Itoa(temp%10) + ans
toNext = temp / 10
i--
j--
}
return ans
}
//相乘
func multiply(num1 string,num2 string) string{
var ans string
for i := len(num1)-1;i>=0;i--{
for j := len(num2) - 1;j<i;j++{
x := int(num1[i] - '0')
y := int(num2[j] - '0')
if x * y == 0{
continue
}
temp := strconv.Itoa(x*y)
for t:=0;t<len(num1)+len(num2) - (x + y + 2);t++{
temp += "0"
}
ans = addString(ans,temp)
}
}
return ans
}