给你一个以行程长度编码压缩的整数列表 nums 。
考虑每对相邻的两个元素 [freq, val] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。
请你返回解压后的列表。
解法一
使用ArrayList
class Solution {
public int[] decompressRLElist(int[] nums) {
List<Integer> list = new ArrayList<>();
//nums[2*i]:要循环的数字
//nums[2*i+1]:循环的次数
for (int i = 0; i < nums.length; i += 2) {
for (int j = 0; j < nums[i]; j++) {
list.add(nums[i+1]);
}
}
int[] arr = new int[list.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = list.get(i);
}
return arr;
}
}
解法二
创建数组
class Solution {
public int[] decompressRLElist(int[] nums) {
int count = 0;
//先记录一共需要几个数字,然后创建数组
for (int i = 0; i < nums.length; i += 2) {
count += nums[i];
}
int[] result = new int[count];
count = 0;
//这里上面的解法一致
for (int i = 0; i < nums.length; i += 2) {
for (int j = 0; j < nums[i]; j++) {
result[count] = nums[i + 1];
count++;
}
}
return result;
}
}