zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Eclipse (indigo) 中安装jdk包并执行Maven
    UVA
    Android 仿QQ界面的实现
    Ajax是什么
    jieba.NET与Lucene.Net的集成
    jieba中文分词的.NET版本:jieba.NET
    SharePoint 2013技巧分享系列
    SharePoint 2013常用开发工具分享
    SharePoint 2013技巧分享系列
    SharePoint 2013技巧分享系列
  • 原文地址:https://www.cnblogs.com/cry-star/p/12416827.html
Copyright © 2011-2022 走看看