我想生成n
从 0 到 2^n-1 的二进制数字。例如 3 位数字,“000”、“001”、“010”、...、“111”(十进制的 0 到 7)。我使用的方法是使用java.lang.Integer.toBinaryString()
方法并在必要时添加零,如下所示:
(defn pad-zero [s n]
(str (reduce str (repeat (- n (count s)) "0")) s))
(defn binary-permutation [n]
(map (fn [s] (pad-zero s n))
(map #(Integer/toBinaryString %) (range 0 (Math/pow 2 n)))))
使用这段代码,我可以像这样生成我想要的东西。3位数:
(binary-permutation 3)
=> ("000" "001" "010" "011" "100" "101" "110" "111")
但是这段代码看起来有点冗长。有没有更好或更clojure的方法来做到这一点?