题目:
给定一个N位数,例如12345,从里面去掉k个数字,得到一个N-k位的数,
例如去掉2,4,得到135,去掉1,5,得到234。设计算法,求出所有得到的
N-k位数里面最小的那一个
解决方案一:
(1)第一步要确定剩余N-K位的数的最高位:
从个位开始算起,从第N-K位开始向高位比较,求出最小数字,作为高位。
例如,3 1 1 2 3 3 1,K=3时,从7-3=4开始(为2),向上比较发现,1更小,所以高位设置为1,记录此时位置P1(等于也可以替换,从而取最高位的1).
(2)再确定次高位:
从N-K-1开始向上到P1-1,此时最小数字为1.
依此类推,最后就可以得到最小数1121.
解决方案二:
例如,1 2 3 4 5 6 7, K=3
剩余N-K位,则定义一个N-K的数组R,用来存放所选数字。
(1)初始化R,存最低N-K位 4567
(2)向上遇到1,则3<R最高位4:
此时需要对R进行调整,调整规则如下,如果高位数字小于相邻低位数字,则用高位数字替换之。
最高位再用当前数字替换。
于是,得到3456.
不断执行以上过程,就得到了最终结果1234.
对方案一中举例进行验证,正确。
版权声明:本文为博主原创文章,未经博主允许不得转载。