2016.5.30 jd算法面试题

原创 2016年05月30日 18:33:34
# 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()



运行结果如下:








版权声明:本文为博主原创文章,未经博主允许不得转载。

十七道海量数据处理面试题与Bit-map详解

前言     本博客内曾经整理过有关海量数据处理的10道面试题(十道海量数据处理面试题与十个方法大总结),此次除了重复了之前的10道面试题之后,重新多整理了7道。仅作各位参考,不作它用。     ...

Hadoop的核心设计

HDFS HDFS是一个高度容错性的分布式文件系统,可以被广泛的部署于廉价的PC之上。它以流式访问模式访问应用程序的数据,这大大提高了整个系统的数据吞吐量,因而非常适合用于具有超大数据集的应用程...

Java 算法面试题 判断质数

  • 2017年06月27日 17:46
  • 3KB
  • 下载

JD笔试试题(凭记忆写的+人生感悟 try finally )

京东笔试:技术篇(一套卷,包括测试,算法,研发) 一:填空题(4分 * 15) 15 个 涉及的面非常广的选择题,但是比较侧重基础。包括数据结构的,c++类的,操作系统的,计算机网络的。 二...

算法大全-面试题-数据结构.docx

  • 2013年05月20日 07:56
  • 47KB
  • 下载

iOS面试题系列之常见算法

iOS面试中熟悉常见算法1、 对以下一组数据进行降序排序(冒泡排序)。“24,17,85,13,9,54,76,45,5,63” int main(int argc, char *argv[]) {...

算法面试题 剑指offer

  • 2017年11月13日 09:54
  • 20.94MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2016.5.30 jd算法面试题
举报原因:
原因补充:

(最多只允许输入30个字)