LeetCode算法题解 788-旋转数字

mac2025-12-09  6

题目描述

题解:

看代码的注释。

代码:

class Solution { public: int rotatedDigits(int N) { int cnt = 0; for(int i = 1; i <= N; i++) { if(rotateIsOk(i))// 判断: 1.每个数位旋转180°后,是否有效 2. != i { cnt++; } } return cnt; } bool rotateIsOk(int x) { vector <int> vec; int tx = x; while(tx) { int tmp = tx % 10; tx /= 10; // 旋转规则: // 0 1 8 -> 0 1 8 // 2 5 -> 5 2 // 6 9 -> 9 6 if(tmp == 0 || tmp == 1 || tmp == 8) { vec.push_back(tmp); } else if(tmp == 2) { vec.push_back(5); } else if(tmp == 5) { vec.push_back(2); } else if(tmp == 6) { vec.push_back(9); } else if(tmp == 9) { vec.push_back(6); } else { //cout << "出现了无效的数" << " " << tmp << endl; return false;// 1. 如果某个数字不是上述的情况之一,那么旋转后就是无效的数,直接返回false } } //2. 虽然不是无效的数了,但是还要判断旋转之后的数是不是等于原来的数 int rotateNum = 0; int k = 1; for(int i = 0; i < (int)vec.size(); i++) { rotateNum += vec[i]*k; k *= 10; } if(rotateNum == x) { //cout << "rotateNum = x = " << rotateNum << endl; return false; } else { //cout << "rotateNum = " << rotateNum << endl; //cout << "x = " << x << endl; return true; } } };
最新回复(0)