美文网首页
IOS 算法(基础篇) ----- 速算机器人

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

作者: ShawnAlex | 来源:发表于2020-09-29 15:14 被阅读0次

    一款速算机器人, 店家对机器人说出两个数字(记作 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 算法(基础篇) ----- 速算机器人

          本文链接:https://www.haomeiwen.com/subject/ypseuktx.html