一款速算机器人, 店家对机器人说出两个数字(记作 x 和 y),说出计算指令:
"A" 运算:使 x = 2 * x + y;
"B" 运算:使 y = 2 * y + x。
机器人根据字符串中字符的顺序表示计算顺序,最终返回 x 与 y 的和为多少。
例如
输入:s = "AB" 输出:4
经过一次 A 运算后,x = 2, y = 0。
再经过一次 B 运算,x = 2, y = 2。
最终 x 与 y 之和为 4。
方法1 遍历
按照题意可以直接机械写出
循环判断
A: x = 2 * x + y
B: y = 2 * y + x
返回 x + y
func calculate(_ s: String) -> Int {
var x = 1, y = 0
for word in s {
if word == "A" {
x = 2 * x + y
}else if word == "B" {
y = 2 * y + x
}
}
return x + y;
}
方法2 数学计算
因为最后返回的结果是 x + y
那么每有一个A, 有x+y=(2x+y)+y=2x+2y
那么每有一个B, 有x+y=x+(2y+x)=2x+2y
可以看出每出现一个A或者B,都使x+y的值翻倍(x2)
所以我们可以得出结果为
((x+y)*(2^s长度), 因为x+y=1, 即只需计算 "2的s长度" 次方即可, 1行代码
func calculate(_ s: String) -> Int {
return Int(pow(Double(2) , Double(s.count)));
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论