Leetcode - Strobogrammatic Number II

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 ["11","69","88","96"].
[分析]
实现2参考[url]https://leetcode.com/discuss/50412/ac-clean-java-solution[/url],
看这么清爽的代码真是让人赏心悦目~
实现2的思路就是从中间往两端扩展,自己的实现1思路是从两端往中间扩展,注意两端不能为0.


public class Solution {
// Method 2
public List<String> findStrobogrammatic(int n) {
return helper(n, n);
}
public List<String> helper(int n, int m) {
if (n == 0) return new ArrayList<String>(Arrays.asList(""));
if (n == 1) return new ArrayList<String>(Arrays.asList("0", "1", "8"));
List<String> list = helper(n - 2, m);
List<String> ret = new ArrayList<String>();
for (String s : list) {
if (n != m) ret.add("0" + s + "0");
ret.add("1" + s + "1");
ret.add("8" + s + "8");
ret.add("6" + s + "9");
ret.add("9" + s + "6");
}
return ret;
}
// Method 1
char[] cand = {'0', '1', '8', '6', '9'};
public List<String> findStrobogrammatic1(int n) {
List<String> ret = new ArrayList<String>();
if (n <= 0) return ret;
recur(new char[n], 0, n - 1, ret);
return ret;
}
public void recur(char[] item, int i, int j, List<String> ret) {
if (i > j) {
ret.add(new String(item));
return;
} else if (i == j) {
for (int k = 0; k < 3; k++) {
item[i] = cand[k];
ret.add(new String(item));
}
return;
} else {
int start = i == 0 ? 1 : 0;
for (int k = start; k < 5; k++) {
if (k < 3) {
item[i] = item[j] = cand[k];
} else if (k == 3) {
item[i] = '6'; item[j] = '9';
} else {
item[i] = '9'; item[j] = '6';
}
recur(item, i + 1, j - 1, ret);
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值