LintCode:寻找丢失的数 II

 

寻找丢失的数 II 

给一个由 1 - n 的整数随机组成的一个字符串序列,其中丢失了一个整数,请找到它。

 注意事项

n <= 30

样例

给出 n = 20, str = 19201234567891011121314151618

丢失的数是 17 ,返回这个数。

思路:回溯法

 1 class Solution {
 2 public:
 3     /**
 4      * @param n: An integer
 5      * @param str: a string with number from 1-n in random order and miss one number
 6      * @return: An integer
 7      */
 8     int getNum(vector<bool> &flag)
 9     {
10         for(int i=1; i<flag.size(); ++i)
11         {
12             if(flag[i]==false)return i;
13         }
14         return -1;
15     }
16     void Backtrace(int n, string &str, int i, int count, vector<bool> &flag, int &result)
17     {
18         if(result!=-1)return;//如果result已经有值,说明其他分支已经计算出来了,此分支直接返回
19         if(i>str.size() || count>=n)return;
20         if(i==str.size()){
21             if(n-1==count){
22                 result=getNum(flag);
23             }
24             return;
25         }
26         if(str[i]=='0')return;//不能从0开始取数
27         for(int j=1; j<=2; ++j)//由于n<=30,故最多取两个字符组成一个数字
28         {
29             int num=atoi(str.substr(i, j).c_str());
30             if(num<=0 || num>n || flag[num]==true)continue;
31             flag[num]=true;
32             Backtrace(n, str, i+j, count+1, flag, result);
33             flag[num]=false;
34         }
35     }
36     int findMissing2(int n, string &str) {
37         if(n<=0 || str.size()==0)return -1;
38         vector<bool> flag(n+1, false);
39         int count=0;
40         int result=-1;
41         Backtrace(n, str, 0, count, flag, result);
42         return result;
43     }
44 };

 

 

转载于:https://www.cnblogs.com/jeysin/p/8654149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值