玄魂工作室秘书 [玄魂工作室]

昨天发的算法有一处情况没考虑到,比如加一后有进位,导致又出现重复数字的情况,修正后今天重新发一次。

比如输入99,那B应该是101 因为100有两个连续相当的0。

基本思路:最坏的办法 加1一直加1 直到找到有不重复的数为止。

面试:这道题要是作为面试题的话,要跟面试官确认好,数A的范围,比如是否有小数是否有负数,等等。在这里我们把题确定为正数。

优化思路:

如果输入的数本身不存在重复,则加1;如果存在重复,比如我们输入的是11100234,那如果要找比11100234大的最小没有重复的数,最先重复的两位数是11,那么如果想让11不重复并且比11100234大,那么应该让第二位的1加1 变成12100234。然后为了让数字最小,则把2后面的数字都变成0,变成12000000;然后在从2后开始找不重复数,00重复,变成01;所以结果是12010101。这里需要注意:如果变化后又进位的情况,还需要重新处理一遍,比如199,第一遍处理后变成了200,200还是有重复,则需要重新处理。

# -*- coding: utf-8 -*-
"""
题目:输入一个数A,找到大于A的一个最小数B,且B中不存在连续相当的两个数字。
比如输入99,那B应该是101 因为100有两个连续相当的0
基本思路:最坏的办法 加1一直加1 直到找到有不重复的数为止
优化的思路 如果输入是1099 加1后变成1100,那么他下一个不重复的数如果一直加1效率就会比较低,这是可以优化的点
这道题要是作为面试提的话,要跟面试官确认好,数A的范围,比如是否有小数
是否有负数,等等。在这里我们把题确定为正数
""" def get_data(num):
"""
获取num个10相乘的数字,为了让重复的数字加1,比如num=4 则返回10000
args:需要0的个数
"""
data = 1
while num > 0:
data = data * 10
num = num -1
return data def get_tail(num, data):
"""
获取data的后面num个数,比如data=1345 num=3 则返回345
args:num需要取后几位 data数字
"""
list_data = []
#获取到num位0的数字
head = get_data(num)
#用抹除的方式获取后几位
need_data = data % head
return need_data def judge(data):
"""
判断data中是否有连续重复数字
args:data数字
""" i = 1
while i < len(data):
#判断是否有两个数字相等
if string_num[i-1] == string_num[i]: return True
i = i + 1
return False if __name__ == "__main__":
#输入的数字
num = 1099
num = num + 1
#数字转字符串,为了判断是否有相等的数字
string_num = str(num) i = 1
flag = 0
while True:
if(judge(string_num)==False):
break
while i < len(string_num):
#判断是否有两个数字相等
if string_num[i-1] == string_num[i]:
#如果有重复的数字,则把重复的两个数,中小的一位数字加1,然后在把后面的位置0
new_len = len(string_num) - i - 1
num = num + get_data(new_len)
tail = get_tail(new_len, num)
#置0的办法是用num减掉后面的几位数
num = num - tail
string_num = str(num) flag = 1
#置0后 在找后面几位去找不重复的最小数
i = i + 1
#如果flag=0 证明没有重复的 证明找到了不重复的数字,则退出
if flag == 0:
num = num + 1
string_num = str(num) #如果flag=0 并且运算到了最后一位
if flag == 1 and i >=len(string_num):
#在判断下是否有重复,如果有重新算,没有则停止
if(judge(string_num)):
i = 0
flag = 0
continue
else:
break print string_num

1099输出是:1201 ; 99 输出是:101; 9 输出是:12 ;1098 输出是:1201

更多算法内容,欢迎关注 订阅号“白话算法:

Python算法与数据结构--求所有子数组的和的最大值

把搜索树转成双向链表

优秀算法教程推荐

面试题解:输入一个数A,找到大于A的一个最小数B,且B中不存在连续相等的两个数字的更多相关文章

  1. Js有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

    <!DOCTYPE html> <title>Title</title> <script> var arr = [1,2,3,4,11]; var s ...

  2. 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...

  3. 输入三个数a,b,n,输出a和b不大于n的公倍数的个数

    题:输入三个数a,b,n,输出a和b不大于n的公倍数的所有个数. 这题的思想是先求得a和b的最大公约数,然后用a和b的积除以最大公约数,得到最小公倍数,再持续加上最小公倍数,直到超过n,记下n的个数. ...

  4. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

  5. 谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?

    谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做? 分析: "假设两个整数数组为A和B,各有N个元素,任意两个数的和组成的数组C有N^2个元素. ...

  6. javascript深入理解--作用域,作用域链,闭包的面试题解

    一.概要 作用域和作用域链是js中非常重要的特性,关系到理解整个js体系,闭包是对作用域的延伸,其他语言也有闭包的特性. 那什么是作用域?作用域指的是一个变量和函数的作用范围. 1.js中函数内声明的 ...

  7. 【进阶2-3期】JavaScript深入之闭包面试题解

    这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/19 作用域指的是一个变量和函数的作用范围,JS中函数内声明的所有变 ...

  8. 任意输入3个数,判断能否组成三角形(python)

    任意输入3个数,判断能否组成三角形. 三角形:两边之和大于第三边 直角三角形:勾股定理 代码如下: # 输入合法性检查,必须输入正数,不支持科学计数法'''try: <语句>except ...

  9. 【题解】子序列个数 [51nod1202] [FZU2129]

    [题解]子序列个数 [51nod1202] [FZU2129] 传送门:子序列个数 \([51nod1202]\) \([FZU2129]\) [题目描述] 对于给出长度为 \(n\) 的一个序列 \ ...

随机推荐

  1. 微信小程序基于第三方websocket的服务器端部署

    微信小程序后台请求越来越严格 1.request要求用https 2.websocket要求用wss 3.测试后发现websocket只能走433端口 作为.net开发,websocket又是使用的第 ...

  2. Web前端原生JavaScript浅谈轮播图

    1.一直来说轮播图都是困扰刚进业内小白的一大难点,因为我们不仅需要自己作出一个比较完美的运动框架(虽然网上一抓一大把,但是哪有比自己做出来实现的有成就感,不是吗?^_^),还必须需要非常关键性的把握住 ...

  3. mysql物理备份基本操作

    Ⅰ.xtrabackup介绍 xtrabackup只能备份innodb引擎的数据,不能备份表结构,percona开源的,强烈推荐最新版本(旧版本bug多) innobackupex可以备份myisam ...

  4. Spring Security OAuth2 Demo -- good

    1. 添加依赖授权服务是基于Spring Security的,因此需要在项目中引入两个依赖: <dependency> <groupId>org.springframework ...

  5. checkbox事件的变化

    <input type="checkbox" checked={this.state.checked} onChange={this.checkedChangeHandler ...

  6. UnicodeEncodeError: 'ascii' codec can't encode character...的解决方法

    在python2.7下,因为想从数据库中读出来分类名进行写入到文件,提示 Traceback (most recent call last): File "test.py", li ...

  7. c# 如何读取web.config中的内容(ConfigurationManager)

    1.web.config中写入 <appSettings>    <add key="TokenQPark" value="http://localho ...

  8. 在docker上运行.net core程序

    一.安装docker及镜像 1.在centos上安装docker,命令如下: # yum install docker 2.让docker随机启动: # service docker start# c ...

  9. 显著性检测(saliency detection)评价指标之KL散度距离Matlab代码实现

    步骤1:先定义KLdiv函数: function score = KLdiv(saliencyMap, fixationMap) % saliencyMap is the saliency map % ...

  10. Java的序列化和反序列化

    概述 Java对象的序列化和反序列化,这个词对我来说追溯到大学阶段,学Java对象流时知道有这东西.老师告诉我们可以把Java对象化作字节流,储存文件或网络通信.然后就是巴啦巴拉,一脸懵逼.举个例子, ...