Я реализовал функцию TraverseStringClockwise, которая принимает разделенную запятыми строку целых чисел, ширину и высоту и возвращает новую строку, проходя по часовой стрелке, используя 2D Char Array. Я пытаюсь сделать то же самое, используя массив 1D, но у меня возникают проблемы.
Пример:
Str =»1,2,3,4,5,6,7,8,9,10,11,12” ; ширина = 3; Высота = 4; Returnstr =» 1,2,3,6, 9,12,11,10,7,4,5,8”
Любые указатели / помощь?
вот код
открытый класс TraverseStringClockwise {
// Build 2-dimensional matrix representing h * w
public static String[][] buildMatrix(String[] s, int width, int height)
{
String[][] matrix = new String[height][width];
int charPos = 0;
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
matrix[i][j] = s[charPos++];
}
}
return matrix;
}
public static String traverseStringClockwise(String s, int width, int height)
{
// invalid if width or height are zero or there aren't enough elems in String to fill the matrix
if(s == null || width == 0 || height == 0 || (s.split(",").length != width * height) )
{
return null;
}
String[][] matrix = buildMatrix(s.split(","), width, height); // O(n) where n = w*h
Cursor cursor = new Cursor(width, height);
StringBuilder sb = new StringBuilder();
while(!cursor.isWalkComplete()) // // O(n) where n = w*h
{
cursor.walk();
sb.append(matrix[cursor.colPos][cursor.rowPos]);
if(!cursor.isWalkComplete())
{
sb.append(",");
}
}
return (sb.length() > 1) ? sb.toString() : null;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String input = "1,2,3,4,5,6,7,8,9,10,11,12";
int width = 3, height = 4;
String[][] block = buildMatrix(input.split(","), 3, 4);
System.out.println("INPUT = " + input);
System.out.println("OUTPUT = " + walkStringClockwise(input, width, height));
}
}