找出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 digitsint[] f = new int[n+1];f[1] = 3; // 0, 1, 8f[2] = 4; // 11, 88, 69, 96for(int i=3; i<=n; i++) {if(i % 2 == 0) { // i is evenf[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;
}

Google Interview - 数字旋转180度相关推荐

  1. 什么!卷积要旋转180度?!

    全文共988个字,6张图,预计阅读时间8分钟. 一看这个标题就会想,这有什么大惊小怪的,可能好多人觉得这是个脑残话题,但我确实误解了两三年-- 今天在读<OpenCV算法精解>的时候,发现 ...

  2. 高通平台android7.1系统显示旋转180度

    实现方法 内核层修改 kernel\msm-3.18\arch\arm\boot\dts\qcom\dsi-panel-lm215w-lvds-1080p-video.dtsi增加qcom,mdss- ...

  3. 在html中让图片旋转180度,gif图片旋转教程:怎么把gif旋转90度/180度 附gif图片旋转软件...

    视频可以用视频编辑软件将视频旋转90度>>gif旋转90度或180度呢,往下看,你可在本文中找到答案. 先睹为快,看看旋转的效果对比图: 原图                    顺时旋 ...

  4. 基于html+css的盒子内容旋转180度

    准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 20 ...

  5. cv2 图像逆时针旋转180度

    使用 OpenCV 的 Python 库时,可以使用 cv2.rotate() 函数来旋转图像.具体地,可以使用以下代码将图像逆时针旋转 180 度: import cv2# 读入图像 img = c ...

  6. Python视频旋转180度

    Python视频旋转180度 from moviepy.editor import *aviFileName = r'video.mp4' resultFileName = r'rotate.mp4' ...

  7. 菜单箭头旋转180度

    今天练手了一个简单的小案例,就是手指hover住菜单的时候,菜单旁边的小箭头旋转180度. 用到了transform变形中rotate()旋转和transition过渡中animation动画的知识点 ...

  8. 实现图片沿水平和竖直方向翻转(旋转180度)

    相机旋转180度,为了不改变原有的算法,最好的方法是将图片旋转180,这样就和之前拍摄的图片一致了.最先想到的方法是在basler相机中设置,但只找到了ReverseX,不满足要求. 查阅左飞的图像处 ...

  9. Android 11.0 recovery页面旋转180度问题的解决方案

    1.前言 在11.0的系统rom定制化开发工作中,在系统中recovery的页面也是相关重要的一部分,在系统recovery ota升级等功能,都是需要recovery功能的,在某些产品定制化中 在r ...

最新文章

  1. Java虚拟机中获得Runtime实例的方法是什么?
  2. AI一分钟 | 传阿里百度京东6月回归A股;汽车合资股比限制将取消,特斯拉或成最大赢家...
  3. (伪)datagridview里面id的自增长
  4. Matt Smith 的 悬浮标签
  5. boost::log::core用法的测试程序
  6. mybatis默认的数据源连接池(PooledDataSource和UnPooledDataSource)
  7. iPhone12详细拆解报告出炉!(附主要器件清单)
  8. java integer valueof_对 Java Integer.valueOf() 的一些了解
  9. 程序安装mysql数据库_安装Mysql数据库
  10. 有人问我,一个人创业需要什么技能?
  11. Socket服务端与网络调试助手模拟串口服务器通讯示例
  12. Word 插入参考文献 通过尾注插入并更改尾注罗马数字为阿拉伯数字
  13. html5的geolocation 定位误差大的解决办法
  14. Firefox七种武器之firebug
  15. 成功路上并不拥挤,因为坚持的人不多
  16. Teamviewer删除账号
  17. 《数据结构(c++语言版)》 清华大学邓俊辉
  18. 输入一个字符,是小写转换为大写,大写转换为小写,其他字符原样输出
  19. 2021年全面攻读人物传记【书单】(持续更新)
  20. Shell脚本命令(长期更新)

热门文章

  1. 护眼灯显色指数怎么选择?护眼灯显色指数80和90的区别是什么
  2. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
  3. 戴尔科技云平台:赋能“新基建”, 打造“云底座”
  4. 八旗旗主,八大贝勒(亦称人王)
  5. 浅谈雷达在气象领域的基本应用
  6. nyoj663弟弟的作业
  7. Booth理解与Booth改进版的由来
  8. 软件测试五年工作经验自我评价,测试工程师自我评价_测试工程师自我评价范例...
  9. 国产操作系统之凝思磐石安装
  10. 谷歌移动端seo优化如何做