转置表示为字符串的矩阵?

时间:2015-11-14 17:05:05

标签: java

我有一个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"

我无法理解我出错的地方

3 个答案:

答案 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输入以进一步推广。希望它可以帮到你。