IOS 算法(基础篇) ----- 速算机器人

一款速算机器人, 店家对机器人说出两个数字(记作 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 算法合集地址

你可能感兴趣的:(IOS 算法(基础篇) ----- 速算机器人)