- 👑专栏内容:力扣刷题
- ⛪个人主页:子夜的星的主页
- 💕座右铭:前路未远,步履不停
目录
- 一、题目描述
- 二、题目分析
- 1、常规解法
- 2、取巧解法
一、题目描述
题目链接:力扣LCP.14 速算机器人
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:
"A"
运算:使 x = 2 * x + y;
"B"
运算:使 y = 2 * y + x;
在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 A、B 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。
二、题目分析
1、常规解法
循环遍历字符串每一个位置上的字符,如果遇见是'A'
就执行 x = 2 * x + y;
,如果是B
就执行y = 2 * y + x;
获取每一位的字符可以用charAt()
方法。
可以参照:【力扣1812】判断国际象棋棋盘中一个格子的颜色
class Solution {
public int calculate(String s) {
int x = 1 , y = 0;
for(int i = 0;i<s.length();i++){
if(s.charAt(i) == 'A'){
x = 2 * x + y;
}else{
y = 2 * y + x;
}
}
return x+y;
}
}
2、取巧解法
如果遇见一个'A'
就执行 x = 2 * x + y;
,如果遇见一个B
就执行y = 2 * y + x;
而目标结果是x+y
,所以如果遇见一个'A'
,最值结果是x+y=(2x+y)+y=2x+2y
出现一个'B'
,结果是x+y=x+(2y+x)=2x+2y
所以每出现一个'A'
或者'B'
,x+y
的值都为2*(x+y)
。
class Solution {
public int calculate(String s) {
return 1 << s.length();
}
}