这道题就是水题一道,只要根据k的情况分类讨论,向前数k个数的时候遇到0时从数组尾部开始,遇到数组尾部使用 % 取到前部分即可。需要注意的是不能在原数组操作,所求的是改变前的和,所以需要用另一个数组返回答案。
class Solution {
public:
vector<int> decrypt(vector<int>& code, int k) {
vector<int>ans=code;
int len=code.size();
for(int i=0;i<len;i++)
{
if(k==0)
{
ans[i]=0;
}
else if(k<0)
{
int sum=0;
for(int j=1;j<=abs(k);j++)
{
int index;
if(i-j>=0)
index=i-j;
else
index=i-j+len;
sum+=code[index];
}
ans[i]=sum;
}
else
{
int sum=0;
for(int j=1;j<=abs(k);j++)
{
int index;
if(i+j<len)
index=i+j;
else
index=(i+j)%len;
sum+=code[index];
}
ans[i]=sum;
}
}
return ans;
}
};