Try   HackMD

LeetCode 1652. Defuse the Bomb

https://leetcode.com/problems/defuse-the-bomb/description/

題目大意

拆除炸彈遊戲

給定長度為 n 的環狀陣列 code 和密鑰 k

  • 如果 k > 0 將第 i 個數字替換為後 k 個數字的總和
  • 如果 k < 0 將第 i 個數字替換為前 k 個數字的總和
  • 如果 k == 0 將第 i 個數字替換為 0

思考

依照題意即可

C++ 參考答案:

class Solution
{
public:
    vector<int> decrypt(vector<int> &code, int k)
    {
        const int n = code.size();
        vector<int> ans(n);

        if (k == 0)
            return ans;

        int sign = 1;
        if (k < 0)
        {
            k *= -1;
            sign = -1;
        }

        for (int i = 0; i < n; ++i)
        {
            for (int j = 1; j <= k; ++j)
            {
                ans[i] += code[(i + j * sign + n) % n];
            }
        }

        return ans;
    }
};

Go 參考答案:

func decrypt(code []int, k int) []int {
	n := len(code)
	ans := make([]int, n)

	if k == 0 {
		return ans
	}

	sign := 1
	if k < 0 {
		k = -k
		sign = -1
	}

	for i := 0; i < n; i++ {
		for j := 1; j <= k; j++ {
			ans[i] += code[(i+j*sign+n)%n]
		}
	}

	return ans
}