题目链接:Leetcode 1652. 拆炸弹
题意:
你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。
为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。
- 如果
k > 0,将第i个数字用 接下来k个数字之和替换。 - 如果
k < 0,将第i个数字用 之前k个数字之和替换。 - 如果
k == 0,将第i个数字用0替换。
由于 code 是循环的, code[n-1] 下一个元素是 code[0] ,且 code[0] 前一个元素是 code[n-1] 。
给你 循环 数组 code 和整数密钥 k ,请你返回解密后的结果来拆除炸弹!
解题思路:
数据量小,直接模拟
class Solution {
public:
vector<int> decrypt(vector<int>& code, int k) {
int n = code.size();
vector<int> ans(n, 0);
if(k == 0) {
return ans;
} else if(k > 0) {
for(int i = 0; i < n; i++) {
int res = 0;
for(int j = 1; j <= k; j++) {
res += code[(i+j+n)%n];
}
ans[i] = res;
}
} else {
for(int i = 0; i < n; i++) {
int res = 0;
for(int j = 1; j <= -k; j++) {
res += code[(i-j+n)%n];
}
ans[i] = res;
}
}
return ans;
}
};
本文解析LeetCode题目1652,介绍如何通过模拟循环数组和理解密钥规则,实现对循环数组的加密解密,以拆除炸弹。涉及的关键技术包括循环数组操作、模拟算法以及密钥驱动的替换策略。

1421

被折叠的 条评论
为什么被折叠?



