zoukankan      html  css  js  c++  java
  • LeetCode 1652. 拆炸弹 模拟

    地址 https://leetcode-cn.com/problems/defuse-the-bomb/

    你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 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 ,请你返回解密后的结果来拆除炸弹!
    
     
    
    示例 1:
    
    输入:code = [5,7,1,4], k = 3
    输出:[12,10,16,13]
    解释:每个数字都被接下来 3 个数字之和替换。解密后的密码为 [7+1+4, 1+4+5, 4+5+7, 5+7+1]。注意到数组是循环连接的。
    示例 2:
    
    输入:code = [1,2,3,4], k = 0
    输出:[0,0,0,0]
    解释:当 k 为 0 时,所有数字都被 0 替换。
    示例 3:
    
    输入:code = [2,4,9,3], k = -2
    输出:[12,5,6,13]
    解释:解密后的密码为 [3+9, 2+3, 4+2, 9+4] 。注意到数组是循环连接的。如果 k 是负数,那么和为 之前 的数字。
     
    
    提示:
    
    n == code.length
    1 <= n <= 100
    1 <= code[i] <= 100
    -(n - 1) <= k <= n - 1
     

    算法1
    一道模拟题
    主要是考虑 环形数组在正向和逆向的循环中的边界处理
    注意 c++中对负数取模与预想的有出入

    C++ 代码

    class Solution {
    public:
        vector<int> ans;
        void change(int idx, const vector<int>& code, int k)
        {
            if (k == 0) {
                ans[idx] = 0;
                return;
            }
    
            while(k!=0){
                int curr = idx + k;
                while (curr < 0) curr += ans.size();
                curr = curr % ans.size();
                ans[idx] += code[curr];
                if (k > 0) k--;
                else k++;
            }
        }
    
        vector<int> decrypt(vector<int>& code, int k) {
            ans = vector<int> (code.size());
            for (int i = 0; i < code.size(); i++) {
                change(i, code, k);
            }
            return ans;
        }
    };
    
     
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    ini_set /ini_get函数功能-----PHP
    【转】那个什么都懂的家伙
    word 2007为不同页插入不同页眉页脚
    August 26th 2017 Week 34th Saturday
    【2017-11-08】Linux与openCV:opencv版本查看及库文件位置等
    August 25th 2017 Week 34th Friday
    August 24th 2017 Week 34th Thursday
    August 23rd 2017 Week 34th Wednesday
    August 22nd 2017 Week 34th Tuesday
    August 21st 2017 Week 34th Monday
  • 原文地址:https://www.cnblogs.com/itdef/p/14124385.html
Copyright © 2011-2022 走看看