转换表示为字符串的矩阵

  • 本文关键字:字符串 表示 转换 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"

我无法理解我在哪里出错

此方法适用于表示方阵的字符串。

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();
}

这将转置存储在长度为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 );
}

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

转置后,.它的行将是column&列将是行

A-D
B-E
C-F

&字符串表示将看起来像ADBECF。为了快速解释矩阵换位,可以查看矩阵换位内部

这是您的问题指定的更通用的实现。它需要一排&col输入以进行进一步的泛化。希望它能帮助你。

最新更新