{..} is called brace expansion. The output can be zero-padded in bash version
4+, but not before that. You can use
{0{1..9},{10..20}} for earlier versions.
http://wiki.bash-hackers.org/syntax/expansion/brace
Note though that brace expansion generates a list of
all the possible patterns and passes them all to your command. This means that ls, in this case, is given a list of 20 possible filenames to search for, and will spit out an error on every non-matching name. This kind of thing makes brace expansion less than ideal for filename matching. Brace expansion is better used for generating sequences of strings for input into loops and such.
For filename matching, you should use globbing patterns instead, as
allend just demonstrated.
http://mywiki.wooledge.org/glob
globs simply test existing filenames to see if they match the pattern, and expands to a list of the ones that match. So with globbing, ls only gets handed a list of the files that actually exist, and no errors will be generated.