Leetcode Combinations

public class Solution {
    public ArrayList<ArrayList<Integer>> combine(int n, int k) {
        return combine(1,n+1,k);
    }
   
    public ArrayList<ArrayList<Integer>> combine(int low,int upper, int k) {
        ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>> ();
        if(k==1) {
            for(int i=low;i<upper;i++){
                ArrayList<Integer>r=new ArrayList<Integer>();
                r.add(i);
                result.add(r);
            }            
            return result;
        }
        for(int i=low;i<upper;i++){
            ArrayList<ArrayList<Integer>>r=combine(i+1,upper,k-1);
            for(ArrayList<Integer> a:r){
                a.add(0,i);
            }
            result.addAll(r);
        }
        return result;
    }
}