My code:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
int[] map = new int[10];
public List<String> findStrobogrammatic(int n) {
List<String> ret = new ArrayList<String>();
if (n <= 0) {
return ret;
}
Arrays.fill(map, -1);
map[0] = 0;
map[1] = 1;
map[6] = 9;
map[8] = 8;
map[9] = 6;
char[] board = new char[n];
helper(0, board.length - 1, n, board, ret);
return ret;
}
private void helper(int begin, int end, int n, char[] board, List<String> ret) {
if (begin > end) {
ret.add(String.valueOf(board));
return;
}
else if (begin == end) {
board[n / 2] = '0';
helper(begin + 1, end - 1, n, board, ret);
board[n / 2] = '1';
helper(begin + 1, end - 1, n, board, ret);
board[n / 2] = '8';
helper(begin + 1, end - 1, n, board, ret);
}
else {
for (int i = 0; i < 10; i++) {
if ((begin == 0 && i == 0) || map[i] == -1) {
continue;
}
else {
board[begin] = (char) (i + '0');
board[end] = (char) (map[i] + '0');
helper(begin + 1, end - 1, n, board, ret);
}
}
}
}
public static void main(String[] args) {
Solution test = new Solution();
List<String> ret = test.findStrobogrammatic(3);
System.out.println(ret.toString());
}
}
自己写了出来。
采用的 backtracking 的思想。
答案和这个差不多。
Anyway, Good luck, Richardo! — 09/22/2016