如果可以从一维数组中获取行和列,请提供以下宽度和公式。您将如何获得对角线和反对角线?我的例子很简单。寻找可以扩展到MxN的东西,这很普遍。

伪码

A = array[26];
width = 5;
row(index)    = floor((index / width))
column(index) = index % width
digonal(index) = //???
antidigonal(index) = //???


示例值

row 5:  26  27  28  29  30
row 4:  21  22  23  24  25
row 3:  16  17  18  19  20
row 2:  11  12  13  14  15
row 1:  6   7   8   9   10
row 0:  1   2   3   4   5
--------------------------
column: 0   1   2   3   4

diag 0: 1
diag 1: 6, 2
diag 2: 3, 7, 11
diag 3: 4, 8, 12, 16
etc.

antidiag 0: 5
antidiag 1: 4, 10
antidiag 2: 3, 9, 15
etc.


How to get row and column from index?相关

最佳答案

根据示例中的编号...。

对角k指数为:

i * width + k - i


因为我的范围是0到k。

例如,要打印对角线k,

for(int i = 0; i <= k; i++) {
    System.out.println(array[i * (width - 1) + k]);
}


上面的循环是用Java编写的,javascript循环与此类似。

这给出了从对角线0到对角线宽度-1的对角线。
对于其余的对角线,请为每个k使用(其中k的范围为宽度到2 *宽度-1)

for(int i = k - (width - 1); i < width - 1; i++) {
    System.out.println(array[i * (width - 1) + k]);
}


例如,如果宽度为5,则在第一个for循环中使用k = 0到4,然后在第二个for循环中使用k = 6到9,得到9个对角线。

对于反对角线索引,只需从width-1中减去每个对角线值

width - 1 - (i * width + k - i)


对于我的范围如上面for循环所示

关于javascript - 如何获得对 Angular 线和反对 Angular 线数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48195338/

10-12 03:48