题目:
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作
x
和y
),请小扣说出计算指令:
"A"
运算:使x = 2 * x + y
;"B"
运算:使y = 2 * y + x
。在本次游戏中,店家说出的数字为
x = 1
和y = 0
,小扣说出的计算指令记作仅由大写字母A
、B
组成的字符串s
,字符串中字符的顺序表示计算顺序,请返回最终x
与y
的和为多少。
码农不是吗喽(大学生版)-CSDN博客
java代码如下:
class Solution {
public int calculate(String s) {
int x=1;
int y=0;
for(char i:s.toCharArray()){
if (i=='A'){
x=2*x+y;
}else{
y=2*y+x;
}
}
return x+y;
}
}
让我们逐步分析代码:
class Solution
:定义了一个名为Solution
的类。
public int calculate(String s)
:定义了一个名为calculate
的公共方法,它接受一个字符串s
作为参数,并返回一个整数。
int x=1;
:初始化变量x
为 1。在这个问题中,x
初始值为 1。
int y=0;
:初始化变量y
为 0。在这个问题中,y
初始值为 0。接下来的
for
循环遍历字符串s
中的每个字符。
if (i=='A') {...}
:如果当前字符是 'A',则执行x = 2 * x + y
。这实际上是将x
左移一位(相当于乘以 2),然后将y
加到x
上。
else {...}
:如果当前字符不是 'A',则认为是 'B'(因为题目中只提到了 'A' 和 'B'),执行y = 2 * y + x
。这同样是将y
左移一位,并将x
加到y
上。
return x + y;
:在完成所有的计算指令后,返回x
和y
的和。
这个问题的关键在于理解 x
和 y
的变化规律。每次执行 'A' 运算,相当于将 x
左移一位然后加上 y
的值;每次执行 'B' 运算,相当于将 y
左移一位然后加上 x
的值。最终,x
和 y
的和实际上就是字符串 s
对应的二进制数的十进制表示。
测试用例如果 s
是 "ABA",那么计算过程如下:
- 初始时,
x = 1
,y = 0
。- 执行 'A' 运算,
x
变为2*1 + 0 = 2
,y
仍为 0。- 执行 'B' 运算,
y
变为2*0 + 2 = 2
,x
仍为 2。- 再次执行 'A' 运算,
x
变为2*2 + 2 = 6
,y
仍为 2。
最终,x + y = 6 + 2 = 8
。
所以,如果输入的字符串是 "ABA",程序将返回 8。