hqt

Integer Partition

hqt
Aug 3rd, 2013
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.29 KB | None | 0 0
  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3.  
  4.  
  5. public class PartitionNumber {
  6.    
  7.     static int n;
  8.     static int[][] memo;
  9.     public static void main(String[] args) {
  10.         int n = 5;
  11.         memo = new int[n+10][n+10];
  12.         for (int i = 0 ; i <= n; i++) {
  13.             for (int j = 0; j <= n ; j++) {
  14.                 memo[i][j] = -1;
  15.             }
  16.         }
  17.  
  18.         System.out.println("Numbers of Number: " + dp(n,1));
  19.         System.out.println("list all those numbers: ");
  20.         generate(n);
  21.     }
  22.    
  23.     public static int dp(int n, int k) {
  24.         if (n == 0 || k > n) return 0;
  25.         if (n == k) return 1;
  26.         if (memo[n][k] != -1) return memo[n][k];
  27.         if (n > k) return memo[n][k] = dp(n-k,k) + dp(n,k+1);
  28.         else return memo[n][k] = dp(n, k+1);
  29.     }
  30.    
  31.     public static void generate(int n) {
  32.         Queue<Node> queue = new LinkedList<PartitionNumber.Node>();
  33.         for (int i = 1; i <= n; i++) {
  34.             queue.add(new Node(i + "", i, n - i));
  35.         }
  36.         while (!queue.isEmpty()) {
  37.             Node node = queue.poll();
  38.             if (node.remain == 0) System.out.println(node.val);
  39.             for (int i = node.min; i <= node.remain; i++) {
  40.                 queue.add(new Node(node.val + i, i, node.remain - i));
  41.             }
  42.         }
  43.     }
  44.    
  45.     public static class Node {
  46.         String val;
  47.         int min, remain;
  48.         public Node(String val, int min, int remain) {
  49.             this.val = val;
  50.             this.min = min;
  51.             this.remain = remain;
  52.         }
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment