参考了CSDN上一位博主提供的C++的代码

class Solution {
public:
  int confusingNumberII(int N) {
    n = N;
    ans = 0;
    search(0);
    return ans;
  }
private:
  int n, ans;
  void search(long long num) {
    if (num > n) return;
    if (num) {
      if (rotate(num) != num) ++ ans;
    }
    if (num) search(num * 10);
    search(num * 10 + 1);
    search(num * 10 + 6);
    search(num * 10 + 8);
    search(num * 10 + 9);
  }
  long long rotate(long long x) {
    long long y = 0;
    for (; x; x /= 10) {
      int k = x % 10;
      switch (k) {
        case 6: k = 9; break;
        case 9: k = 6; break;
      }
      y = y * 10 + k;
    }
    return y;
  }
};

 

我尝试转换成python,但是却超时了:

 1 class Solution:
 2     def __init__(self):
 3         self.n = 0
 4         self.ans = 0
 5 
 6     def confusingNumberII(self, N: int) -> int:
 7         self.n = N
 8         self.searchNumber(0)
 9         return self.ans
10 
11     def searchNumber(self,num):
12         if num > self.n:
13             return
14         #if self.confusingNumber(num):
15         if num != 0 and self.rotate(num) != num:
16             self.ans += 1
17             #print(str(self.ans) +":"+ str(num))
18         if num != 0:
19             self.searchNumber(num * 10)
20         self.searchNumber(num * 10 + 1)
21         self.searchNumber(num * 10 + 6)
22         self.searchNumber(num * 10 + 8)
23         self.searchNumber(num * 10 + 9)
24 
25     def rotate(self,x):
26         y = 0
27         while x != 0:
28             k = x % 10
29             if k == 6:
30                 k = 9
31             elif k == 9:
32                 k = 6
33             y = y * 10 + k
34             x = x // 10
35         return y

超时的测试用例:1000000000,答案:1950627,python在我本机执行时间:11.3s。

目前没想到解决办法。

posted on 2019-06-16 18:01  Sempron2800+  阅读(226)  评论(0编辑  收藏  举报