public int minimumTotal(List<List<Integer>> triangle) {
		int[] min = new int[triangle.size()];
		int[] preMin = new int[triangle.size()];
		for (int i = 0; i < triangle.size(); i++) {
			if (i == 0) {
				min[0] = triangle.get(0).get(0);
			}
			else{
			for (int k = 0; k < triangle.get(i).size(); k++) {
				if (k == 0)
					min[k] = preMin[k] + triangle.get(i).get(k);
				else if (k == triangle.get(i).size() - 1)
					min[k] = preMin[k - 1] + triangle.get(i).get(k);
				else
					min[k] = Math.min(preMin[k - 1], preMin[k])
							+ triangle.get(i).get(k);
			}
			}

			preMin = min.clone();
		}
		int result = Integer.MAX_VALUE;
		for (int i = 0; i < min.length; i++) {
			if (result > min[i])
				result = min[i];
		}
		return result;
	}