diff --git a/src/main/java/MainExercises.java b/src/main/java/MainExercises.java index e13066e..64b2f2d 100644 --- a/src/main/java/MainExercises.java +++ b/src/main/java/MainExercises.java @@ -146,11 +146,57 @@ public class MainExercises */ public int[][] intPartitions(int n) { - // todo - return null; - } + ArrayList result = new ArrayList<>(); + + int[] currentPartition = new int[n]; + + int k=0; //اخرین ایندکس currentPartition + + currentPartition[k] = n; + + while (true) { + + int[] temp = new int[k+1]; + for(int i=0 ; i<=k ; i++) { + temp[i] = currentPartition[i]; + } + result.add(temp); + + int remained = 0; + while(k>=0 && currentPartition[k]==1) { + remained += currentPartition[k]; + k--; + } + + if(k<0) + break; + + currentPartition[k]--; + remained++; + + + while (remained > currentPartition[k]) { + currentPartition[k+1] = currentPartition[k]; + remained -= currentPartition[k]; + k++; + } + + currentPartition[k+1] = remained; + k++; + + } + + int[][] output = new int[result.size()][]; + for(int i=0 ; i