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

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

比如输入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. .Net Core微服务系列--开篇

    记得原来有个项目是用wcf做的分布式,不仅横向根据业务拆分了,纵向把业务处理.数据访问等也拆分了成不同的服务,这个是当时公司的产品我也只是一个小小的开发人员所以就不做太多的评论,只是不得不吐槽下调试真 ...

  2. 关于TCP/IP,必知必会的十个经典问题[转]

    关于TCP/IP,必知必会的十个问题 原创 2018-01-25 Ruheng 技术特工队   本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. 一 ...

  3. TGI

    淘宝的很多分析会用到TGI这个指标,但是是如何计算的以及该如何理解和应用这个指标?TGI:即Target Group Index(目标群体指数)TGI指数= [目标群体中具有某一特征的群体所占比例/总 ...

  4. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  5. Firefox Profile

    win7环境下打开Firefox,跳出提示信息 "无法加载你的firefox配置文件 它可能已经丢失或无法访问" 解决方法: 1.按下WIN+R 调出运行,然后输入: firefo ...

  6. Smokeping

    Smokeping允许你监测多台服务器. Smokeping使用RRDtool来存储数据,另外,其可基于RRDtool输出生成相应的统计图表. Smokeping由两个部分组成.一个运行在后台.定期收 ...

  7. mime.go

    package manager import (     "mime"     "path" ) //初始化数据 func init() {     if mi ...

  8. JUC中AQS简介

    AQS,在java.util.concurrent.locks包中,AbstractQueuedSynchronizer这个类是并发包中的核心,了解其他类之前,需要先弄清楚AQS.在JUC的很多类中都 ...

  9. 【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  10. bzoj3435 [Wc2014]紫荆花之恋

    如果这棵树不变的话,就是一个裸的点分树套平衡树,式子也很好推$di+dj<=ri+rj$,$ri-di>=dj-rj$ 平衡树维护$dj-rj$,然后查$ri-di$的$rank$即可. ...