You only need 3 simple observations to solve this! Intuitive and well commented JAVA solution.
```\n/\nObservation 1: our highest prioirty is to move the number that is at index 0, with index 1 being 0\n    For example, if we have 3004567 and we want to r
```\n/*\nObservation 1: our highest prioirty is to move the number that is at index 0, with index 1 being 0\n    For example, if we have 3004567 and we want to remove 1 digit, we defintely want to remove 3, so that we can\n    get rid of the following 2 zeros, ending up with 4567, which will always give us the biggest decrease\n\nObservation 2: if there is no case of observation 1, then we want to remove the biggest number in the first ascenging sequence.\n    For example, if we have 234543, we want to remove the 5 first, since after 5 the number starts going down.\n    \nObservatino 3: if we have to remove more than 1 digit, every digit removal can use the same strategy, i.e we can use greedy algorithm here, aka not dp. \n\n*/\n\npublic class Solution {\n    public String removeKdigits(String num, int k) {\n        //change to list\n        List<Character> list = new ArrayList<Character>();\n        for(char c : num.toCharArray()){\n            list.add(c);\n        }\n        //we need to remove k digits\n        for(int i = 0; i<k; i++){\n            int size = list.size();\n            //observation 1\n            if(size > 1 && list.get(1) == '0'){\n                list.remove(0);\n                while(!list.isEmpty() && list.get(0) == '0'){\n                    list.remove(0);\n                }\n            }\n            //if no observation 1, use observation 2\n            if(size == list.size()){\n                for(int j = 0; j < size; j++){\n                    if((j < size - 1 && list.get(j) > list.get(j+1)) || (j == size - 1)){\n                        list.remove(j);\n                        break;\n                    }  \n                }\n            }\n        }\n        //generate output\n        if(list.size() == 0) return "0";\n        StringBuilder result = new StringBuilder();\n        for(Character c : list){\n            result.append(c);\n        }\n        return result.toString();\n    }\n}\n````
[]