给定一个任意大小的“三角形”数组:N
0. [0..N-1]
1. [0..N-2]
2. [0..N-3]
...
N-1. [0]
但是所有的单元格都按顺序存储在一维数组中(从上到下从左到右编号),分别从0到N*(N+1)/2-1,这样的“逻辑”划分为“行” "获得。那些。如果 N = 4,那么我们有
0 1 2 3
4 5 6
7 8
9
需要知道元素 (i) 的索引来计算其逻辑字符串......即 在这种情况下,当按顺序迭代所有索引时,我们得到
0 0 0 0
1 1 1
2 2
3
如何在不使用循环、递归和编译额外的偏移数组的情况下做到这一点?那些。在 O(1)
[添加]
结果是以下不等式,必须用整数解决:

三角形数的个数/检查三角形数 T n由公式完成
这是您想要的线性索引公式(向下舍入)
x,除了需要“翻转”编号。对于 NxN 矩阵,线性索引的范围
i将是[0, N*(N+1)/2)。i对于您的视图三角形,首先在线性索引范围内“翻转”然后应用上面的公式
然后垂直“翻转”结果
http://coliru.stacked-crooked.com/a/29e298a4d8d29bca