本篇博客会讲解力扣“1313. 解压缩编码列表”的解题思路,这是题目链接。
题目要返回一个数组,这个数组是多大呢?由于下标是偶数的元素决定了每个数据要写入几次,所以要对这些项求和,就知道答案数组要开多大了。
接着,我们需要遍历数组,下标是偶数的元素决定了每个数据要写入几次,下标是奇数的元素决定了写入的数据。
int* decompressRLElist(int* nums, int numsSize, int* returnSize){
// 返回数组大小是偶数项之和
*returnSize = 0;
for (int i = 0; i < numsSize; i += 2)
{
(*returnSize) += nums[i];
}
int* ret = (int*)malloc(sizeof(int) * *returnSize);
// 遍历数组,解码
int sz = 0; // 记录写入的位置
for (int i = 0; i < numsSize; i += 2)
{
// 写入nums[i]次nums[i+1]
for (int j = 0; j < nums[i]; ++j)
{
ret[sz++] = nums[i + 1];
}
}
return ret;
}
总结
本题的关键在于,返回的数组大小是下标为偶数的元素之和。
感谢大家的阅读!