如何在字符串中的字符排序斜

如何在字符串中的字符排序斜

问题描述:

IM分裂由平方数他的长度的字符串。如何在字符串中的字符排序斜

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
int a = alphabet.length(); 
int b = (int)Math.round(Math.sqrt(a)); 

System.out.println(java.util.Arrays.toString(splitter(key, b))); 
// prints: [ABCDE, FGHIJ, KLMNO, PQRST, UVWXY, Z] 

分离器功能:

public static String[] splitter(String s, int len) { 
return s.split(String.format("(?<=\\G.{%1$d})", len)); 
} 

我现在想的是对它进行排序对角线是这样的:

[0] = {A,B,D,G,K} 
[1] = {C,E,H,L,P} 
[2] = {F,I,M,Q,U} 
[3] = {J,N,R,V,Y} 
[4] = {O,S,W,Z,0} 
[5] = {T,X,0,0,0} 

我是想通过检查始终如果(I-1)> =我......但我得到混淆了一些循环来解决这个问题d和有点丢在这里..

+2

我可以说,如果你只是有一个5x5矩阵,这将是更容易? –

我下面

  1. 创建的溶液计算结果矩阵的维数;
  2. 使用这些尺寸以NUL字符值初始化二维result阵列;
  3. 基于这样的想法设置数组中的值,即对于同一对角线上的所有元素,它们的坐标总和是恒定的。
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
double root = Math.sqrt(alphabet.length()); 
int width = (int) Math.round(root); 
int height = width < root ? width + 1 : width; 
char[][] result = IntStream.range(0, height) 
          .mapToObj(i -> new char[width]) 
          .toArray(i -> new char[height][]); 

int x = 0, y = 0, sum = 0; 

for (char c : alphabet.toCharArray()) { 
    result[x][y] = c; 

    y = x == Math.min(sum, height - 1) ? Math.min(++sum, width - 1) : y - 1; 
    x = sum - y; 
} 

System.out.println(Arrays.deepToString(result)); 

我们得到以下的输出:

[[A, B, D, G, K], [C, E, H, L, P], [F, I, M, Q, U], [J, N, R, V, Y], [O, S, W, Z, ], [T, X, , , ]] 
+1

这是一个非常讨厌的问题,我无法解决它(虽然我得到了一个方形的5x5矩阵)+1 –

+0

@TimBiegeleisen谢谢!清理它多一点。现在几乎可读:) –

+0

非常感谢 –

不要分裂,然后尝试在矩阵中排序。对数组进行排序,以对角线模式交叉矩阵,将已排序的项目放入矩阵中,合并字符串。

现在你所要做的就是找到一种方法来对角矩阵迭代。