2016.5.30 jd算法面试题
来源:互联网 发布:js获取本地服务器地址 编辑:程序博客网 时间:2024/06/04 18:54
# encoding=utf-8# 2016.5.30 jd算法面试题# 问题描述:# 给出一张手机号码表# 1 2 3# 4 5 6# 7 8 9# 0# 从1开始,每次只能往右、往下走一格、或者不走# 走到了某一格上可以选择按或者不按# 现在给出一个数字,判断该数字能否通过以上方式得到# 可以则返回数字本身# 不行则返回比该数字小的数中的最大数# example:# input: 1477 return: 1477# input: 2560 return: 2559# input: 4587 return: 4580# 先定义迁移字典move_dict = {1:range(2,10)+[0], 2:[2,3,5,6,8,9,0], 3:[3,6,9], 4:range(4,10)+[0], 5:[5,6,8,9,0], 6:[6,9], 7:range(7,10)+[0], 8:[8,9,0], 9:[9], 0:[0]}def judge(string): val = [int(x) for x in string] i = 0 while i<len(val)-1: if val[i+1] in move_dict[val[i]]: i += 1 continue else: # 一旦不符合规则,就需要改数,过程如下 max_v = None # 在val[i]的下一位中寻找小于val[i+1]的最大数 for va in sorted(move_dict[val[i]]): if va<val[i+1]: max_v = va## print 'max_v: ', max_v if max_v is None: # 如果没找到,则回溯 val[i] -= 1 else: val[i+1] = max_v i += 1 # 改完i/i+1后,剩余位可以自动修改为最大 for j in range(i+1,len(val)): val[j] = max(move_dict[val[j-1]]) break return int( ''.join([str(x) for x in val]) )def test_judge(): import random for i in range(10): num = str(random.randint(0,10**4)) print num+': ', judge(num)test_judge()
运行结果如下:
0 0
- 2016.5.30 jd算法面试题
- Java算法面试题
- Java算法面试题
- 算法面试题
- 微软算法面试题
- 面试题算法题
- 算法面试题总结
- 单链表算法面试题
- 算法面试题
- 算法面试题一
- 算法面试题二
- 算法面试题三
- 算法面试题四
- 算法面试题五
- 组合算法面试题
- 算法面试题
- 算法面试题举例
- C++面试题算法
- mina第三章 框架 深入理解
- MongoDB基本管理命令
- java中List,ArrayList,LinkedList的常用方法
- 剑指Offer--051-数组中重复的数字
- 【神奇的C++】求a
- 2016.5.30 jd算法面试题
- iOS RTMP 视频直播开发笔记(6)- 封包 FLV
- leetcode minimum-depth-of-binary-tree
- HDOJ 5430 Three Palindromes
- 强悍的 Vim —— .vimrc(vim 配置文件)
- codeforces 667A A. Pouring Rain(水题)
- jdk8中tomcat修改配置PermSize为MetaspaceSize
- Spring MVC测试框架详解——服务端测试
- No mapping found for HTTP request with URI [/index.html] in DispatcherServlet with name 'springmvc'