我的任务需要基于三 Angular 矩阵进行数值计算(模数不超过9,数组的大小不能超过15):
1 2 3 4 5
7 8 9 0
4 5 6
2 3
1
我认为将数据存储在二维三 Angular 形数组中是最方便的。
UPD:随后,我需要选择从第二层的任何元素到最顶层的最大路径(该路径只能沿对 Angular 线走,不能垂直或水平向上)。这是一个类似于最大路径问题的任务,其解决方案看起来最简单,使用 2D array .
这里我同时遇到了几个问题:
1) 如何静态创建三 Angular 形数组?
现在我正在做这样的事情:
let numbers = [1, 2, 3, 4, 5, 6];
function fillArray(nums, layer) {
let arr = [];
for(let k = 0; k < nums.length;) {
for (let i = 0; i < layer; i++) {
arr[i] = [];
for (let j = 0; j <= i; j++) {
arr[i][j] = nums[k];
k++;
}
}
}
return arr;
}
console.log(fillArray(numbers,3));
也许这是正确的,但它看起来太麻烦了,此外,在我看来,我可以动态计算图层。也许递归解决方案在这里看起来会更好。
2) 如何确定何时创建新的嵌套数组?
静态地讲,一切都非常清楚,但如果我有一个数组,假设它是这样填充的: [ [1], [1, 2], [1, 2] ]
然后如何判断创建新的嵌套数组的时刻,即将当前的数组填充到这个状态:[ [1], [1, 2], [1, 2, 3] ]
和,例如,如果有新元素进入输入,则在填充前一个元素后创建以下内容: [ [1], [1, 2], [1, 2, 3], [1, 2, 3, 4] ]
最佳答案
如果您的计算随机使用三 Angular 矩阵,您可以显式计算行/列索引:
function row_col_from_index(i) {
let row = 0.5 * ((8*i + 1)**0.5 - 1),
col = i - row*(row+1)/2;
return [row, col];
}
function index_from_row_col(row, col) {
return row*(row+1)/2 + col;
}
然后您可以在需要时在矩阵中惰性地创建所需的行
let matrix = [];
...
let [row, col] = row_col_from_index(i);
(matrix[row]||(matrix[row]=[]))[col] = data;
索引中的行/列的“神奇”公式是通过求解计算出来的
x*(x+1)/2 = n
关于javascript - 如何动态填充三 Angular 形二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57335694/