Sorted Lexical Partition of a Number The challenge is really simple: given a number, you split its digits into an array of smaller numbers such that the resulting numbers are non-decreasing. The catch is that you have to split it such that the array length is maximal.

Confused?


You are given a positive integer via STDIN (or closest alternative), command-line argument or function argument in any convenient, unambiguous input format.
You have to partition the number's decimal digits into contiguous, disjoint groups.
The array of numbers represented by these digit groups should be sorted (in the usual, non-decreasing order) without rearranging the groups.
In cases where more than one such partition exists, you have to partition the input into as many numbers as possible. In the case of ties, return one such result.
You can output the array to STDOUT (or closest alternative) or as a function return value. In case of STDOUT (or closest alternative), the array should be printed in any convenient, unambiguous list format.
The split numbers should not have leading zeroes. So for instance 1002003 cannot be printed as either [1, 002, 003] or [1, 2, 3] and the only valid answer for it is [100, 2003].


Test cases:

123456 -&gt; [1, 2, 3, 4, 5, 6]
345823 -&gt; [3, 4, 5, 8, 23]
12345678901234567890 -&gt; [1, 2, 3, 4, 5, 6, 7, 8, 90, 123, 456, 7890]
102 -&gt; [102]
302 -&gt; [302]
324142 -&gt; [3, 24, 142] OR [32, 41, 42]
324142434445 -&gt; [32, 41, 42, 43, 44, 45]
1356531 -&gt; [1, 3, 5, 6, 531]
11121111111 -&gt; [1, 1, 1, 2, 11, 11, 111]
100202003 -&gt; [100, 202003]


Scoring

This is code-golf so shortest code in bytes wins.
Pyth, 34

FNyUz#aYmv:zhdedC,+0N+NlzB)efqSTTY


Try it online here. Notice, this has a time (and space) complexity of O(n). Therefore the test case 12345678901234567890 takes too long in the online compiler. Use the offline one instead (1 minute on my laptop). 

This is only my first attempt. There might be some room for improvements. 

First some ideas how my algorithm works. 


I interpret the input as string and not as a number. 
Then I create all possible subsets of [0, 1, 2, ..., len(n-1)]
For each of these subsets (lets take [1, 4, 5]), I split the input string into part using these numbers. [input[0:1], input[1, 4], input[4,5], input[5,len(input)]]. 
Afterwards I try to convert these numbers into strings. There can be two problems. Pyth (or Python) throws an exception for an empty string, and for a string of numbers starting with 0. Therefore I use a try - catch block (actually infinity loop with an immediate break). If converting was successfully, I add the result to a list Y. 
After I handled all subsets, I filter the list Y for results, that are already sorted and print the last one (the last one has the most groups).


Now the detailed explanation: 

                            Implicit: z = input() (z is a String!)
                                      Y = empty list
FNyUz                       for each subset N of [0, 1, 2, ..., len(z)-1]:

     #                         start try-catch block (actually an infinite loop, 
                               but the Python implementation uses a try catch. 

      aY                          append to Y:
                C,+0N+Nlz            zip([0] + N, N + [len(z)])
        m                            map each element d to
          :zhded                     z[d[0]:d[-1]]
         v                           evaluated
                         B        if this didn't throw an exception already, end the infinite loop
                          ) end for loop   

 f    Y      filter Y for elements T, for which
  qSTT           sorted(T) == T
e            and print the last one (the subsets generated with yUz are sorted 
             by length, so the last one has the most groups)