我有一个25个字符长的字符串,其中每个后续的5个字符代表矩阵中的一行。
String matrix="qwsedrhendtedksiehwnehsbt";
我正在尝试使用函数转换它
public String transpose(String str) {
if (str == null || str.length() == 1 || str.length() == 2) {
return str;
} else {
return str.substring(0, 1) + str.substring(str.length() -1, str.length()) + transpose(str.substring(1, str.length() -1) );
}
}
生成
result="qtwbssehdernhwehneditsekd"
这不是预期的结果。 结果必须是
expectedResult="qrtiewheehsedhsenkwbddsnt"
我无法理解我出错的地方
答案 0 :(得分:3)
此方法适用于表示方形矩阵的字符串。
static String transpose(String s) {
int n = s.length();
int m = (int) Math.sqrt(n);
if (m * m != n)
throw new IllegalArgumentException();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n - 1; i++)
sb.append(s.charAt(i * m % (n - 1)));
sb.append(s.charAt(n - 1));
return sb.toString();
}
这个更通用的版本适用于表示矩形矩阵的字符串。
static String transpose(String s, int rows, int columns) {
int n = s.length();
if (rows * columns != n)
throw new IllegalArgumentException();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n - 1; i++)
sb.append(s.charAt(i * columns % (n - 1)));
sb.append(s.charAt(n - 1));
return sb.toString();
}
答案 1 :(得分:2)
这转换了一个存储在长度为n²的字符串中的nxn字符矩阵。
static String transpose( String s ){
char[] c = s.toCharArray();
int n = (int)Math.sqrt(s.length());
for( int i = 0; i < n; ++i ){
for( int j = i+1; j < n; ++j ){
char h = c[i*n+j];
c[i*n+j] = c[j*n+i];
c[j*n+i] = h;
}
}
return new String( c );
}
答案 2 :(得分:0)
我有一个c ++实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* transpose (const char* matString, unsigned int col, unsigned int row)
{
char *answer = (char*)calloc(strlen(matString), sizeof(char));
unsigned int index = 0;
for(unsigned int i=0;i<col;i++)
{
for(unsigned int j=0;j<row;j++)
{
answer[index++] = matString[j * col + i];
}
}
return answer;
}
int main(int argc, char **argv)
{
printf("%s", transpose("ABCDEF", 3, 2));
return 0;
}
它提供输出 ADBECF
对于程序输入矩阵
A-B-C
D-E-F
换位后,.it的行将为列&amp;列将是行
A-D
B-E
C-F
&安培;字符串表示形式将类似于 ADBECF 。有关矩阵转置的快速解释,请查看Matrix transposition
这是您的问题指定的更通用的实现。这需要一排&amp; col输入以进一步推广。希望它可以帮到你。