本文主要是介绍【力扣LCP】速算机器人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 👑专栏内容:力扣刷题
- ⛪个人主页:子夜的星的主页
- 💕座右铭:前路未远,步履不停
目录
- 一、题目描述
- 二、题目分析
- 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();}
}
这篇关于【力扣LCP】速算机器人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!