2016-01-22 88 views
2

我想寫一個方法,將字符由0,1?組成的字符串,並返回由原始字符串,以?作爲通配符,可以是01。例如,如果輸入是"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"] 
] 

這是我想要的。任何人都可以告訴發生了什麼事?

+0

你是什麼意思「**你的**程序應該......」? – sawa

+0

我複製並粘貼了問題的描述,顯然未能將一些第二人稱代詞改爲第一人稱代詞 – user5613413

+0

不清楚你覺得奇怪。 – sawa

回答

1

您正在遞歸調用zerone,並且qs已更新且每次都有所不同。你沒有將蘋果與蘋果進行比較,以及你正在做什麼(在去除平坦部分時)手動操作的方法。

相關問題