• 1291. Sequential Digits


    问题:

    给定一个范围[low, high],

    求所有在这个范围的数(从小到大排序后的),要求:这些数的后一位数字比前一位数字大一。

    Example 1:
    Input: low = 100, high = 300
    Output: [123,234]
    
    Example 2:
    Input: low = 1000, high = 13000
    Output: [1234,2345,3456,4567,5678,6789,12345]
    
    Constraints:
    10 <= low <= high <= 10^9
    

      

    解法:Backtracking(回溯算法)

    • 状态:到当前位为止,构成的数字。
    • 选择:
      • 第一位:1~9
      • 其他位:前一位+1
    • 递归退出条件:
      • path>high or path的即将加入的下一位数字>9
    • 加入res条件:所得数字path属于[low, high]
      • ⚠️  注意:这里加入res,并不=退出递归。

    ⚠️ 注意:由于本题需要返回有序的结果,最后需要对res 进行排序。sort(res.begin(), res.end());

    代码参考:

     1 class Solution {
     2 public:
     3     void backtrack(vector<int>& res, int path, int nxtdigit, int low, int high) {
     4         if(path>=low && path<=high) {
     5             res.push_back(path);
     6         }
     7         if(path>high || nxtdigit>9) {
     8             return;
     9         }
    10         int cur = 0;
    11         if(path==0) {
    12             for(int i=nxtdigit; i<=9; i++) {
    13                 cur = path*10+i;
    14                 if(cur <= high) {
    15                     backtrack(res, cur, i+1, low, high);
    16                 } else break;
    17             }
    18         } else {
    19             cur = path*10+nxtdigit;
    20             if(cur <=high) backtrack(res, cur, nxtdigit+1, low, high);
    21             else return;
    22         }
    23         return;
    24     }
    25     vector<int> sequentialDigits(int low, int high) {
    26         vector<int> res;
    27         backtrack(res, 0, 1, low, high);
    28         sort(res.begin(), res.end());
    29         return res;
    30     }
    31 };
  • 相关阅读:
    程序员是怎样阅读简历的转
    在res/values下创建attrs.xml
    java clone技术 浅谈 转
    map list...
    Tab与TabHost转
    Silverlight以及Mvc最佳文件下载解决方案(附源码)
    如何将List<T>转换相应的Html(xsl动态转换)(二)
    UML 类图
    xxxxxx
    Xml日志记录文件最优方案(附源代码)
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/14357037.html
Copyright © 2020-2023  润新知