我一直在想如何从左下角将一个字符串对角地换成矩阵。 例如:
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++;
}
}
答案 0 :(得分:0)
这里没有提出任何关于效率的说法,但只要你的字符串适合方阵,它就应该有效:
static char[][] toDiag(String s)
{
int sideLen = (int) Math.sqrt(s.length()); // assume string fits into
// square matrix
char[][] m = new char[sideLen][sideLen];
int index = 0;
//fill lower-left section of array
for (int i = m[0].length - 1; i >= 0; i--)
{
for (int k = 0; k <= m[0].length-1-i; k++)
{
m[i+k][k] = s.charAt(index++);
}
}
//fill upper-right section of array
for (int i = sideLen%2==1?sideLen/2:sideLen/2 -1; i <= m[0].length; i++)
{
for (int k = 0; k <= m[0].length-1-i; k++)
{
m[k][i+k] = s.charAt(index++);
}
}
return m;
}
答案 1 :(得分:0)
public static void main(String[] args)
{
String inString = "123456789";
int N = (int) Math.sqrt((double) inString.length());
int out[][] = new int[N][N];
int index=0;
//fills elements below the diagonal
for(int i=0;i<N-1;i++)
for(int j=0;j<=i;j++)
out[N-1-i+j][j] = Character.getNumericValue(inString.charAt(index++));
//fills the diagonal
for(int i=0;i<N;i++)
out[i][i] = Character.getNumericValue(inString.charAt(index++));
//fills elements above the diagonal
for(int i=N-2;i>=0;i--)
for(int j=0;j<=i;j++)
out[j][N-1-i+j] = Character.getNumericValue(inString.charAt(index++));
//prints the output
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
System.out.print(out[i][j] + "\t");
}
System.out.println();
}
}
答案 2 :(得分:0)
这是一个相当有效的实施,我认为相对容易理解。
此代码在连续的对角线上循环,当当前位置在矩阵内时,它会从字符串中分配下一个字符。
在下图中,问号位置在对角线上,但它们不在矩阵内。这些问号位置的输入字符串中没有字符。
Diagonal Matrix
4 ?
3 ??
2 479
1 258?
0 136??
循环以递增的顺序遍历行,但是每行的赋值都是相反的,因为从正常的Java索引数组方式查看时,矩阵是颠倒的:matrix[size - row - 1]
而不是{{1} }。
这种方式不需要在对角线以下的特殊处理。
matrix[row]
它也适用于较大尺寸的矩阵(4x4,5x5等),但你只能在字符串中编码最多9个值 - 如果你想要更高的值,最好用逗号分隔编码它们string并将字符串拆分为字符串数组。