给定一个N位数,得到一个N-k位的数中最小的数

题目:

给定一个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.

对方案一中举例进行验证,正确。

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

posted @ 2012-08-30 21:46  wangicter的博客  阅读(210)  评论(0编辑  收藏  举报