gpt4 book ai didi

Java 对角矩阵

转载 作者:行者123 更新时间:2023-12-03 23:13:53 25 4
gpt4 key购买 nike

我一直想知道如何将一个字符串从左下角沿对角线包装成一个矩阵。例如:

String str = "123456789";

//Output matrix:
// 479
// 258
// 136

//Or if str = "123456789123456";

//Output would be:

// 2
// 73
// 484
// 2595
// 13616

这是我目前所拥有的:

     int index = 0;
for(int i = 0; i < matrix.length; i++)
{
for(int k = matrix.length - 1; k > -1; k--)
{
if(index == word.length())
break;
matrix[k][i] = "" + str.charAt(index);
index++;
}
}

最佳答案

这是相当有效的实现,我相信它相对容易理解。

这段代码遍历连续的对角线,当当前位置在矩阵内时,它分配字符串中的下一个字符。

在下图中,问号位置在对角线上,但不在矩阵内。对于这些问号位置,没有从输入字符串中提取任何字符。

Diagonal  Matrix
4 ?
3 ??
2 479
1 258?
0 136??

循环按升序遍历行,但对每一行的赋值是相反的,因为从普通的 Java 索引数组方式来看,矩阵是颠倒的:matrix[size - row - 1] 而不是 matrix[row]

这样对角线下方、对角线上方、对角线上方不需要特殊处理。

public static void main(String[] args) throws Exception {
String str = "123456789";
int size = 3;

int[][] matrix = new int[size][size];
{
int index = 0;
for (int diagonal = 0; diagonal < size * 2 - 1; diagonal++) {
int row = diagonal;
int column = 0;
while (row >= 0) {
if (row < size && column < size) {
matrix[size - row - 1][column] = Character.getNumericValue(str.charAt(index++));
}
row--;
column++;
}
}
}
}

它也适用于较大尺寸的矩阵(4x4、5x5 等),但您只能在字符串中对最多 9 个值进行编码 - 如果您想要更高的值,最好将它们编码为以逗号分隔的字符串并将将字符串转换为字符串数组。

关于Java 对角矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23318740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com