LeetCode C++ LCP 17. 速算机器人【String/Math】简单
发布日期:2021-07-01 02:52:02
浏览次数:2
分类:技术文章
本文共 1207 字,大约阅读时间需要 4 分钟。
小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x
和 y
),请小扣说出计算指令:
"A"
运算:使x = 2 * x + y
;"B"
运算:使y = 2 * y + x
。
在本次游戏中,店家说出的数字为 x = 1
和 y = 0
,小扣说出的计算指令记作仅由大写字母 A
、B
组成的字符串 s
,字符串中字符的顺序表示计算顺序,请返回最终 x
与 y
的和为多少。
示例 1:
输入:s = "AB"输出:4解释:经过一次 A 运算后,x = 2, y = 0。再经过一次 B 运算,x = 2, y = 2。最终 x 与 y 之和为 4。
提示:
0 <= s.length <= 10
s
由'A'
和'B'
组成
题意:不用说明了。
思路1:简单模拟即可。代码如下:
class Solution { public: int calculate(string s) { int x = 1, y = 0; for (const char &c : s) { if (c == 'A') x = 2 * x + y; else y = 2 * y + x; } return x + y; }};
效率如下:
执行用时:0 ms, 在所有 C++ 提交中击败了100.00% 的用户内存消耗:5.7 MB, 在所有 C++ 提交中击败了99.24% 的用户
思路2:如果这个字符串很大的话, O ( n ) O(n) O(n) 的算法就无法使用,有没有更快的方法?要求的结果是 x + y x + y x+y ,每出现一个 'A'
,就会有 x + y = ( 2 x + y ) + y = 2 x + 2 y x + y = (2x + y) + y = 2x + 2y x+y=(2x+y)+y=2x+2y ,每出现一个 'B'
,就会有 x + y = x + ( 2 y + x ) = 2 x + 2 y x + y = x + (2y + x) = 2x + 2y x+y=x+(2y+x)=2x+2y 。所以可以知道,每出现一个 'A'/'B'
,都会使得 x + y x + y x+y 的整体值翻倍。于是 O ( 1 ) O(1) O(1) 的代码如下:
class Solution { public: int calculate(string s) { return 1 << s.size(); }};
提交后的结果:
执行用时:0 ms, 在所有 C++ 提交中击败了100.00% 的用户内存消耗:5.9 MB, 在所有 C++ 提交中击败了25.99% 的用户
转载地址:https://memcpy0.blog.csdn.net/article/details/108738283 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月14日 04时13分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
记一次Hive 行转列 引起的GC overhead limit exceeded
2019-05-01
OpenGL ES八 - 交叉存取顶点数据
2019-05-01
crontab定时任务写法
2019-05-01
nginx: [emerg] unknown directive "if($remote_addr" in /usr/local/tools/nginx/conf/nginx.conf:57
2019-05-01
module pip has no attribute main问题解决
2019-05-01
LeetCode 134.Gas Station (加油站)
2019-05-01
Python之命名元组 (namedtuple)
2019-05-01
使用libpcap过滤arp
2019-05-01
在VC环境中调试跟踪变量
2019-05-01
[转帖]Robots.txt指南
2019-05-01
Eclipse + MyEclipse下配置J2EE工程(英文界面)
2019-05-01
Eclipse及其插件下载网址大全
2019-05-01
正则表达式简介(微软)--6.优先权顺序
2019-05-01
多用户与多租户的区别
2019-05-01
Python自动化运维 - day14 - JavaScript基础
2019-05-02
oracle保存小数点前为"0"的问题
2019-05-02
linux sar 命令详解
2019-05-02
ipvsadm 安装配置
2019-05-02
Linux shell脚本的字符串截取
2019-05-02