找出1~10^n中数字翻转过来是本身的数( 96 ->96, 18 -> 81, 0 -> 0, 其他数字翻过来都不是数字)
设计一个函数,判断某个只包含数字的字符串是不是Ambigram(比如,69,88,609,818等都是Ambigram)。Follow up:给一个整数n,找出所有长为n的Ambigram。
可以先求出n-2的答案,再利用n-2的答案求出n的答案,这题方法比较绝,往n-2的答案里面append两个数字的时候分别各自加在两边就行,没必要往中间插入。
public boolean isAmbigram(String s) { int start = 0, end = s.length()-1; while(start <= end) { char left = s.charAt(start++); char right = s.charAt(end--); int val = Integer.parseInt(left+""+right); if(val!=0 && val!=11 && val!=88 && val!=69 && val!=96) { return false; } } return true; } public List<String> generateAmbigram(int n) { if(n == 1) { return Arrays.asList("0", "1", "8"); } else if(n == 2) { return Arrays.asList("00", "11", "88", "69", "96"); } List<String> result = new ArrayList<>(); List<String> list = generateAmbigram(n-2); for(String s:list) { result.add("0"+s+"0"); result.add("1"+s+"1"); result.add("8"+s+"8"); result.add("6"+s+"9"); result.add("9"+s+"6"); } return result; }
另外一种文法:找出所有长度小于等于N的Ambigram。用动态规划来解决。
public List<String> generateAmbigramDP(int n) { List<String> result = new ArrayList<>(); if(n <= 0) return result; List<String>[] dp = new List[n]; dp[0] = Arrays.asList("0", "1", "8"); if(n == 1) return dp[0]; dp[1] = Arrays.asList("00", "11", "88", "69", "96"); for(int i=2; i<n; i++) { List<String> list = dp[i-2]; dp[i] = new ArrayList<>(); for(String s:list) { dp[i].add("0"+s+"0"); dp[i].add("1"+s+"1"); dp[i].add("8"+s+"8"); dp[i].add("6"+s+"9"); dp[i].add("9"+s+"6"); } } for(List<String> list:dp) { result.addAll(list); } return result; }
再问:如果仅仅求有多少个长度为n的Ambigram呢?
【思路】
用动态规划来做。
if i is even, f[i] = f[i-1] + f[i-2] * 2
if i is odd, f[i] = f[i-1] * 3
// f[3] = f[2]*3 = 12;
// 101, 808, 609, 906
// 111, 818, 619, 916
// 181, 888, 689, 986
// f[4] = f[3] + f[2]*2 = 20
// - insert the same middle digit to every number in f[3]
// 1001, 8008, 6009, 9006
// 1111, 8118, 6119, 9116
// 1881, 8888, 6889, 9886
// - insert 69, 96 to every number in f[2]
// 1691, 8698, 6699, 9696
// 1961, 8968, 6969, 9966
public static int count180Number(int n) { // n is number of digits int[] f = new int[n+1]; f[1] = 3; // 0, 1, 8 f[2] = 4; // 11, 88, 69, 96 for(int i=3; i<=n; i++) { if(i % 2 == 0) { // i is even f[i] = f[i-1] + f[i-2] * 2; } else { f[i] = f[i-1] * 3; } } int cnt = 0; for(int num:f) { cnt += num; } return cnt; }
相关推荐
VUE 面试题汇合 vue-interview-questions-master VUE 面试题汇合 vue-interview-questions-master VUE 面试题汇合 vue-interview-questions-master VUE 面试题汇合 vue-interview-questions-master VUE 面试题...
【标题】"interview-docs-master.zip" 是一个压缩文件,通常包含一系列关于面试准备的文档,特别是针对Java程序员的面试资源。这个压缩包可能是为了帮助求职者在寻找Java开发职位时,熟悉并掌握常见的面试问题和解答...
123-Essential-JavaScript-Interview-Question, JavaScript访问问题 123 -JavaScript-Interview-Questions这本书将由 2018年06月 完成并可以供购买。 如果你想让我把这本书的早期拷贝,请在这里添加你的NAME 和电子...
本压缩包中的"coding-interview-university-master"目录,很可能是包含了一个逐步学习算法和数据结构的课程结构,这对于准备技术面试,尤其是硅谷流行的“编程面试”极其有价值。 学习算法,首先要理解基础的数据...
标题中的"Interview-code-practice-python-master_escapek5u_python_"暗示了这是一个关于Python编程的面试题练习项目,可能包含了各种常见的编程题目,旨在帮助开发者准备技术面试。"escapek5u"可能是创建或整理这个...
这份名为"Interview-Materials.rar__interview_interview-q"的压缩包文件显然是为准备IT行业面试者精心准备的一份资源集合。它涵盖了C、C++以及Linux等多个关键领域的知识,帮助求职者一站式获取必要的面试准备材料...
"Algorithm_for_Interview-Chinese-master.zip" 这个压缩包文件很可能包含了丰富的面试准备资料,聚焦于C++语言,涵盖了多种核心算法和概念。让我们深入探讨一下这些关键知识点。 1. **查找与排序**: - **查找...
Technical-Interview-Preparation-Checklist.pdf
"Java-Interview-超全集合github上评分最高的jiva面试题"就是一个这样的宝藏,它涵盖了Java编程语言、Git版本控制工具以及面试策略等多个方面的知识点。以下是这些内容的详细解析: 1. **Java基础** - **数据类型...
DOCKER-INTERVIEW-QUESTIONS.pdf
深度学习框架001 深度学习框架有哪些?002 介绍一下TensorFlow常用的Optimizer003 Caffe的depthwise为什么慢,怎么解决00
115-Java-Interview-Questions-and-Answers, 115 Java访谈问题和答案- 终极列表 #115-Java-Interview-Questions-and-Answers我们将讨论关于Java面试中可以使用的各种问题,以便雇主在Java和面向对象编程方面测试你的...
Java interview-高级Java面试题2019_java-interview.zip
java面试题_java-interview-questions-master.zip2、在 Java 程序中怎么保证多线程的运行安全? 出现线程安全问题的原因一般都是三个原因: 1、 线程切换带来的原子性问题 解决办法:使用多线程之间同步...
《深入解析Interview-main源码》 在编程领域,面试是检验开发者技能的重要环节,而"Interview-main-源码.rar"这个压缩包很可能包含了常见的面试题目和相关问题的解答,以及可能的实现源代码。这份源码是开发者们...
Angular-angular-interview-questions.zip,300个角度面试问答列表[WIP]角度面试问答,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决...
google-interview-university:我对“ google-interview-university”的学习
考研保研简历提问助手-GLM4_Postgraduate-Interview-Question-Assistant
java面试资料_java-interview-lzj
java服务端面试题整理_java-server-interview-questions.zip