Design using Backtracking and Recursion + List
Code\n\nclass CombinationIterator {\n    int len=0;\n    List<String> list = new ArrayList<>();\n    private void helper(String s, int c, int idx, StringBuilder
# Code\n```\nclass CombinationIterator {\n    int len=0;\n    List<String> list = new ArrayList<>();\n    private void helper(String s, int c, int idx, StringBuilder sb){\n        //Base Case\n        if(sb.length() == c){\n            list.add(sb.toString());\n            return;\n        }\n\n        for(int i=idx; i<s.length(); i++){\n            sb.append(s.charAt(i));\n            helper(s, c, i+1, sb);\n            sb.deleteCharAt(sb.length()-1);\n        }\n    }\n\n    public CombinationIterator(String characters, int combinationLength) {\n        helper(characters, combinationLength, 0, new StringBuilder());\n    }\n    \n\n// TC:-O(1)\n    public String next() {\n        return list.get(len++);\n    }\n    \n// TC:-O(1)\n    public boolean hasNext() {\n        return len < list.size();\n    }\n}\n\n/**\n * Your CombinationIterator object will be instantiated and called as such:\n * CombinationIterator obj = new CombinationIterator(characters, combinationLength);\n * String param_1 = obj.next();\n * boolean param_2 = obj.hasNext();\n */\n```
['String', 'Backtracking', 'Design', 'Recursion', 'Iterator', 'Java']