• leetcode 246 中心对称数问题


    // 中心对称数问题
    // 中心对称数指旋转180°之后和自己完全对称的数
    // 能够中心对称的数字包括{{0:0}, {1:1}, {6:9}, {9:6}, {8:8}}
    // 给定a,b,求[a,b]之间有多少个中心对称数
    // 深度优先搜索,触底返回
    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    class Solution{
    private:
      vector<string> same{"0", "1", "8"};
      vector<pair<char,char>> two{{'0','0'}, {'1','1'}, {'6','9'}, {'9','6'}, {'8','8'}};
      int cnt = 0;
    public:
      int strobogrammaticInRange(string low, string high){
        int n1 = low.size();
        int n2 = high.size();
        for (int i=n1;i<=n2;i++){
          DFS(low, high, i, "");
        }
        return cnt;
      }
      void DFS(string& low, string& high, int n, string str){ //n表示一共有几位数
        if (n==0 &&stol(str)>=stol(low) &&stol(str)<=stol(high)) {
          cnt++; cout<<str<<endl;return;
        }
        if (n%2==1) {
          for (auto val:same) DFS(low, high, n-1, val);
        }
        if (n==0||n%2==1) return; // n==0但不满足范围条件,直接返回;n为奇数已经在same里面搜索完了,也返回
        for (int i=(n==2?1:0);i<=4;i++){  //n是偶数,n==2时说明是最外面的两个数,不能是0
          DFS(low, high, n-2, two[i].first+str+two[i].second);
        }
    
      }
    };
    
    int main(){
      Solution s;
      int res = s.strobogrammaticInRange("10","10000");
      // cout<<res;
      return 0;
    }
  • 相关阅读:
    iOS sandbox
    属性和成员变量
    SDWebImage
    MRC和ARC混编
    MRC转ARC(2)
    MRC转ARC
    CentOS7.x关闭防火墙
    Linux下Tomcat带日志启动命令
    SpringBoot-属性文件properties形式
    SpringBoot-配置Java方式
  • 原文地址:https://www.cnblogs.com/cry-star/p/12416827.html
Copyright © 2020-2023  润新知