2
我想寫一個方法,將字符由0
,1
和?
組成的字符串,並返回由原始字符串,以?
作爲通配符,可以是0
或1
。例如,如果輸入是"011?0"
,那麼輸出應該是["01100", "01110"]
。平直工作不同,當直接調用時,當在方法中調用
我已經寫了下面的代碼:
def zerone str, arr
qs = str.count("?") - 1
i = 0
while i < str.length
if str[i] != "?"
arr << str[i]
i += 1
else
arr1 = Array.new(arr)
arr2 = Array.new(arr)
arr1 << "1"
arr2 << "0"
arr = [arr1, arr2]
arr.map! {|x| zerone(str[i+1..-1], x)}
break
end
end
arr.flatten(qs)
end
當我打電話zerone
,我得到一個平坦的數組:
b = zerone("10???", [])
# => ["1", "0", "1", "1", "1", "1", "0", "1", "1", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "0", "1", "0", "0", "1", "1", "1", "0", "0", "1", "0", "1", ...]
如果我改變最後一行所以該方法返回arr
,而不調用flatten
,那麼我得到這個:
b = zerone("10????", [])
# => [
[
[
[["1", "0", "1", "1", "1", "1"], ["1", "0", "1", "1", "1", "0"]],
[["1", "0", "1", "1", "0", "1"], ["1", "0", "1", "1", "0", "0"]]
],
[
[["1", "0", "1", "0", "1", "1"], ["1", "0", "1", "0", "1", "0"]],
[["1", "0", "1", "0", "0", "1"], ["1", "0", "1", "0", "0", "0"]]
]
],
[
[
[["1", "0", "0", "1", "1", "1"], ["1", "0", "0", "1", "1", "0"]],
[["1", "0", "0", "1", "0", "1"], ["1", "0", "0", "1", "0", "0"]]
],
[
[["1", "0", "0", "0", "1", "1"], ["1", "0", "0", "0", "1", "0"]],
[["1", "0", "0", "0", "0", "1"], ["1", "0", "0", "0", "0", "0"]]
]
]
]
b.flatten(3)
# => [
["1", "0", "1", "1", "1", "1"],
["1", "0", "1", "1", "1", "0"],
["1", "0", "1", "1", "0", "1"],
["1", "0", "1", "1", "0", "0"],
["1", "0", "1", "0", "1", "1"],
["1", "0", "1", "0", "1", "0"],
["1", "0", "1", "0", "0", "1"],
["1", "0", "1", "0", "0", "0"],
["1", "0", "0", "1", "1", "1"],
["1", "0", "0", "1", "1", "0"],
["1", "0", "0", "1", "0", "1"],
["1", "0", "0", "1", "0", "0"],
["1", "0", "0", "0", "1", "1"],
["1", "0", "0", "0", "1", "0"],
["1", "0", "0", "0", "0", "1"],
["1", "0", "0", "0", "0", "0"]
]
這是我想要的。任何人都可以告訴發生了什麼事?
你是什麼意思「**你的**程序應該......」? – sawa
我複製並粘貼了問題的描述,顯然未能將一些第二人稱代詞改爲第一人稱代詞 – user5613413
不清楚你覺得奇怪。 – sawa