我有个问题。我想生成二进制列表。但列表成员之间只会有一点变化。
oneBitAll :: Integral a => a -> [[String]]
对于 n=2
输出:
["00","01","11","10"] 已经 ["00","10","11","01"]
n=3
oneBitAll 3
[["000","001","011","010","110","111","101","100"], ["000","001","011", "111","101","100","110","010"], ["000","001","101","100","110","111","011", "010"], ["000","001","101","111","011","010","110","100"], ["000","010","011 ","001","101","111","110","100"],......]
成员之间只有一点点变化。
请帮忙。
这只给出了一个
g 0 = [""]
g n = (map ('0':)) (g (n-1)) ++ (map ('1':)) (reverse (g (n-1)))
格雷码适用于此。但我想找到所有组合。
如何为给定的 n 数生成所有可能的灰色代码?
permute [] = [[]]
permute xs = concatMap (\x -> map (x:) $ permute $ delete x xs) xs
g 0 = [""]
g n = (map ('0':)) (g (n-1)) ++ (map ('1':)) (reverse (g (n-1)))
oneBitAll n = (map transpose . permute . transpose $ g n)
此代码生成一半的可能性。我可以添加此代码什么?此代码生成;
[["000","001","011","010","110","111","101","100"],["000","010","011","001 ","101","111","110","100"],["000","001","101","100","110","111","011","010 "],["000","010","110","100","101","111","011","001"],["000","100","101", "001","011","111","110","010"],["000","100","110","010","011","111","101", “001”]]
但必须生成 12 个成员。