What's a good way for figuring out all possible words of a given length

后端 未结 12 1980
一生所求
一生所求 2021-02-04 17:27

I\'m trying to create an algorithm in C# which produces the following output strings:

AAAA
AAAB
AAAC
...and so on...
ZZZX
ZZZY
ZZZZ

What is the

12条回答
  •  难免孤独
    2021-02-04 18:14

    Inspired by Garry Shutler's answer, I decided to recode his answer in T-SQL.

    Say "Letters" is a table with only one field, MyChar, a CHAR(1). It has 26 rows, each an alphabet's letter. So we'd have (you can copy-paste this code on SQL Server and run as-is to see it in action):

    DECLARE @Letters TABLE (
        MyChar CHAR(1) PRIMARY KEY
    )
    DECLARE @N INT
    SET @N=0
    WHILE @N<26 BEGIN
        INSERT @Letters (MyChar) VALUES ( CHAR( @N + 65) )
        SET @N = @N + 1
    END
    -- SELECT * FROM @Letters ORDER BY 1
    
    SELECT A.MyChar, B.MyChar, C.MyChar, D.MyChar
    FROM @Letters A, Letters B, Letters C, Letters D
    ORDER BY 1,2,3,4
    

    The advantages are: It's easily extensible into using capital/lowercase, or using non-English Latin characters (think "Ñ" or cedille, eszets and the like) and you'd still be getting an ordered set, only need to add a collation. Plus SQL Server will execute this slightly faster than LINQ on a single core machine, on multicore (or multiprocessors) the execution can be in parallel, getting even more boost.

    Unfortunately, it's stuck for the 4 letters specific case. lassevk's recursive solution is more general, trying to do a general solution in T-SQL would necessarily imply dynamic SQL with all its dangers.

提交回复
热议问题