1.题目
2.解法
思路:
-
如果n == 0,那么返回“” (空字符串)
-
如果n == 1, 那么返回“0”, “1”, ”8“
-
如果n == 2, 那么返回 “11” , “69”, “88”, “96”(这里不包含”00“的情况)
-
如果n == 3, 那么返回 (这里包含”00“的情况,例如"1001")
“1” + s + “1”
“6” + s + “9”
“8” + s + “8”
“9" + s + “6”
最外围是对称数,那么s呢,就等于n==1的时候的取值,满足n-2
-
那么n == 4 也是类似的道理
3.代码
java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public List<String> searchSymmetry(int n, int m){
/* n == m,因为当m的长度大于2的时候,是可以取到00的
== 2的时候,是不可以取到00的,因为不合法
*/m
// 判断不合法情况
if(n < 0 || m < 0 || n > m){
throw new IllegalArgumentException("Invalid Input");
}
// 递归结束的条件
if(n == 0) return new ArrayList<String>(Arrays.asList(""));
if(n == 1) return new ArrayList<String>(Arrays.asList("0", "1", "8"));
List<String> str = searchSymmetry(n-2, m);
List<String> res = new ArrayList<String>();
for(int i = 0; i < str.size(); i++){
String s = str.get(i);
// 例如是1001
if(n != m) res.add("0" + s + "0");
res.add("1" + s + "1");
res.add("6" + s + "9");
res.add("8" + s + "8");
res.add("9" + s + "6");
}
return res;
}
public static void main(String[] args){
Main ma = new Main();
List<String> list = ma.searchSymmetry(3, 3);
for(String s : list){
System.out.print(s + " ");
}
}
}
System.out.print(s + " ");
}
}
}