1. 题目
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
找到所有长度为 n 的中心对称数。
示例 :
输入: n = 2
输出: ["11","69","88","96"]
2. 解题
add1 = {"0","1","8"}
,add2 = {"00","11","69","88","96"}
i 是奇数,我们在 i-1 偶数的基础上每个数中间位置 add1i 是偶数,我们在 i-2 偶数的基础上每个数中间位置 add2package com.test001;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;public class Test001 {public static List<String> centerNumber(int n) {Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();List<String> numberList1 = Arrays.asList("0", "1", "8");List<String> numberList2 = Arrays.asList("11", "69", "88", "96");List<String> add1 = Arrays.asList("0", "1", "8");List<String> add2 = Arrays.asList("00","11", "69", "88", "96");List<String> numberList = new ArrayList<>();if (n <= 0) {return numberList;} else if (n == 1) {return numberList1;} else if (n == 2) {return numberList2;}map.put(1, numberList1);map.put(2, numberList2);for (int i = 3; i <= n; i++) {numberList = new ArrayList<>();if (i % 2 == 1) {List<String> bastList = map.get(i - 1);for (int j = 0; j < bastList.size(); j++) {String num = bastList.get(j);int h = num.length() / 2;for (int k = 0; k < add1.size(); k++) {numberList.add(num.substring(0, h) + add1.get(k) + num.substring(h));}}map.put(i, numberList);} else {List<String> bastList = map.get(i - 2);for (int j = 0; j < bastList.size(); j++) {String num = bastList.get(j);int h = num.length() / 2;for (int k = 0; k < add2.size(); k++) {numberList.add(num.substring(0, h) + add2.get(k) + num.substring(h));}}map.put(i, numberList);}}return map.get(n);}public static void main(String[] args) {//System.out.println(centerNumber(3));System.out.println(centerNumber(4));System.out.println(centerNumber(5));}}
如果觉得《LeetCode 247. 中心对称数》对你有帮助,请点赞、收藏,并留下你的观点哦!