private void helper(List<List<Integer>> triangle, int rowIdx, List<List<Integer>> sum) {

    if (rowIdx < triangle.size()) {
      List<Integer> curtRow = triangle.get(rowIdx);
      List<Integer> curtSum = new ArrayList<Integer>();

      for (int i = 0 ; i < curtRow.size() ; i++) {
        if (i == 0) {
          curtSum.add(curtRow.get(i) + sum.get(rowIdx - 1).get(i));
        } else if (i == curtRow.size() - 1) {
          curtSum.add(curtRow.get(i) + sum.get(rowIdx - 1).get(i - 1));
        } else {
          curtSum.add(curtRow.get(i) + Math.min(sum.get(rowIdx - 1).get(i), sum.get(rowIdx - 1).get(i - 1)));
        }
      }

      sum.add(curtSum);
      helper(triangle, ++rowIdx, sum);
    }
  }