From cc27506b9ac46c53c989cd8a12f127a435d1fe8b Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Wed, 22 Apr 2026 16:50:43 +0330 Subject: [PATCH] implement spiralTraversal function in MainExercises --- src/main/java/MainExercises.java | 98 +++++++------------------------- 1 file changed, 21 insertions(+), 77 deletions(-) diff --git a/src/main/java/MainExercises.java b/src/main/java/MainExercises.java index eabb9f2..1826014 100644 --- a/src/main/java/MainExercises.java +++ b/src/main/java/MainExercises.java @@ -1,23 +1,6 @@ public class MainExercises { - /* - you should create a triangle with "*" and return a two-dimensional array of characters based on that - the triangle's area is empty, which means some characters should be " " - example 1, input = 3: - * - ** - *** - - example 2, input = 5: - * - ** - * * - * * - ***** - - the output has to be a two-dimensional array of characters, so don't just print the triangle! - */ public char[][] generateTriangle(int n) { char[][] triangle = new char[n][]; for (int i = 0; i < n; i++) { @@ -34,70 +17,31 @@ public class MainExercises return triangle; } - - - /* - SPIRAL TRAVERSAL OF A RECTANGULAR MATRIX - - Given a rectangular matrix (2D array) of integers, this method traverses - it in a spiral order (clockwise from outside to inside) and returns - the elements as a 1D array. - - EXAMPLE: - Input matrix: - 1 2 3 - 4 5 6 - 7 8 9 - - Spiral order: start at top-left (1), go right →, then down ↓, - then left ←, then up ↑, then repeat inward. - - Result: {1, 2, 3, 6, 9, 8, 7, 4, 5} - - so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array - - RECTANGULAR MATRIX ASSUMPTION: - This method assumes the input matrix is RECTANGULAR (all rows have - the same number of columns). In Java, we can verify this because - 2D arrays might be jagged (rows of different lengths). - - IMPORTANT: In Java, we do NOT need to pass rows and cols! - The 2D array 'matrix' knows its own dimensions: - - Number of rows: matrix.length - - Number of columns: matrix[0].length (if rectangular) - */ public int[] spiralTraversal(int[][] matrix) { - // todo - return null; + int[] result = new int[matrix.length * matrix[0].length]; + int index = 0; + while (matrix.length > 0) { + for (int i = 0; i < matrix[0].length; i++) { + result[index++] = matrix[0][i]; + } + matrix = rotateMatrix(matrix); + + } + return result; } - /* - integer partitioning is a combinatorics problem in discreet maths - the problem is to generate sum numbers which their summation is the input number + private int[][] rotateMatrix(int[][] matrix) { + int m = matrix.length; + int n = matrix[0].length; + int[][] newMatrix = new int[n][m -1]; + for (int i = 0; i < n; i++) { + for (int j = 1; j < m; j++) { + newMatrix[i][j -1] = matrix[j][n -1 -i]; + } + } + return newMatrix; + } - e.g. 1 -> all partitions of integer 3 are: - 3 - 2, 1 - 1, 1, 1 - - e.g. 2 -> for number 4 goes as: - 4 - 3, 1 - 2, 2 - 2, 1, 1 - 1, 1, 1, 1 - - Note: As you can see in the examples, we want to generate distinct partitions, - which means 1,2 and 2,1 are not different — they count as the same combination. - - You should generate all partitions of the input number. - - Hint: You can determine the size and order of the arrays by finding the pattern - of partitions and their count. Trust me, this one's fun and easy :) - - If you're familiar with Lists and ArrayLists, you can also edit the method's - body to use them instead of arrays. - */ public int[][] intPartitions(int n) { // todo