LeetCode——LCP 17. 速算机器人

题目

小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:

“A” 运算:使 x = 2 * x + y;
“B” 运算:使 y = 2 * y + x。
在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 A、B 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。
题目传送门

思路

我看到这题,就想着,乘以2,可以用位运算来做,这是考察的点。
虽然也A了。

代码

class Solution {
    public int calculate(String s) {
        int x=1;
        int y=0;
        int length=s.length();
        for(int i=0;i<length;++i)
        {
            if(s.charAt(i)=='A')
            {
                x<<=1;
                x+=y;
            }
            else
            {
                y<<=1;
                y+=x;
            }
        }
        return x+y;
    }
}

结果

在这里插入图片描述

题解思路

结果看了评论区,有个老哥是真的秀。因为最终要计算x+y的和。
当字符为A时,结果为 2x+y+y;
当字符为B时,结果为2y+x+x。
所以无论如何,结果都是2(x+y)。
我直接好家伙,直接返回2(x+y)^s.length()即可!

class Solution {
    public int calculate(String s) 
    {
        if(s.length()==0)
            return 1;
        return (int)(Math.pow(2,s.length()));
    }
}

题解结果

在这里插入图片描述
有这种如此敏锐的数学思维,真的是太强了。

思路2

既然是求2的n次方,那还不如直接位运算呢!

代码

class Solution {
    public int calculate(String s) 
    {
        if(s.length()==0)
            return 1;
        int length = s.length();
        int ans=1;    
        for(int i=0;i<length;++i)
        {
            ans<<=1;
        }
        return ans;
    }
}

结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值