Commit f2d3b7f

mo <mokha@cisco.com>
2017-06-24 04:39:59
try a dp solution to map decoding.
1 parent 33afc78
Changed files (1)
spec/map_decoding_spec.rb
@@ -108,6 +108,33 @@ describe "map_decoding" do
     decode([], message.chars)
   end
 
+  # dp[n] = dp[n - 1] + dp[n - 2] if [x,y] <= 26
+  # dp[n] = dp[n - 1]
+  def map_decoding(message)
+    puts message.inspect
+    dp = [1]
+
+    return message[0].to_i > 0 ? 1 : 0 if message.size == 1
+
+    1.upto(message.size - 1) do |n|
+      x, y = message[n - 1], message[n]
+      z = (x + y).to_i
+      puts [x, y].join.inspect
+      if x != "0" && z <= 26
+        dp[n] = dp[n - 1] + dp[n - 2]
+      else
+        if y.to_i > 0
+          dp[n] = dp[n - 1]
+        else
+          dp[n] = 0
+        end
+      end
+      puts dp.inspect
+    end
+    modulo = (10 ** 9) + 7
+    dp.last % modulo
+  end
+
   [
     { message: "123", expected: 3 },
     { message: "12", expected: 2 },