A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down).
Find all strobogrammatic numbers that are of length = n.
For example,
Given n = 2, return
Given n = 2, return
["11","69","88","96"]
.
Hint:
- Try to use recursion and notice that it should recurse with n - 2 instead of n - 1.
Solution: recursion
Space complexity is stack space.
Space complexity is stack space.
public class Solution { public ListfindStrobogrammatic(int n) { return helper(n, n); } public List helper(int remainLen, int n) { List res = new ArrayList (); if (remainLen == 0) { return res; } if (remainLen == 1) { res.add("0"); res.add("1"); res.add("8"); return res; } if (remainLen == 2) { if (remainLen != n) { res.add("00"); // 00 is invalid } res.add("11"); res.add("69"); res.add("88"); res.add("96"); return res; } List sub = helper(remainLen - 2, n); for (int i = 0; i < sub.size(); i++) { String s = sub.get(i); if (remainLen != n) { res.add("0" + s + "0"); // 0不能被加到最高位 } res.add("1" + s + "1"); res.add("6" + s + "9"); res.add("8" + s + "8"); res.add("9" + s + "6"); } Collections.sort(res); return res; } }