农民领袖
- 积分
- 11938
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2011-7-23
- 最后登录
- 1970-1-1
|
简单写了一下Q3的做法,有不太好的地方求指点:
- string rotate180(string s, unordered_map<char, char>& nums) {
- string r = s;
- for (int i = 0; i<s.size(); i++)
- r[s.size()-1-i] = nums[s[i]];
- return r;
- }
- void helper(string& cur, int start, const string& low, const string& high, vector<string>& res, unordered_map<char, char>& nums) {
- if (start==cur.size()) {
- if ((cur.size()==low.size() && cur<low) || (cur.size()==high.size() && cur>high) || cur.back()=='0')
- return;
- string ans = rotate180(cur, nums);
- if ((ans.size()==low.size() && ans<low) || (ans.size()==high.size() && ans>high) || ans == cur)
- return;
- res.push_back(ans);
- return;
- }
- for (auto item : nums) {
- cur[start] = item.first;
- if (start==0 && item.first=='0')
- continue;
- helper(cur, start+1, low, high, res, nums);
- }
- }
- vector<string> stroNumInRange(string low, string high) {
- vector<string> res;
- unordered_map<char, char> nums = {{'0', '0'}, {'1', '1'}, {'6', '9'}, {'8', '8'}, {'9', '6'}};
- for (int sz = low.size(); sz <= high.size(); sz++) {
- string cur = string(sz, ' ');
- helper(cur, 0, low, high, res, nums);
- }
- return res;
- }
- int main() {
- vector<string> ra = stroNumInRange("0", "20");
- for (auto r : ra)
- cout << r << " ";
- cout << endl;
- vector<string> rb = stroNumInRange("50", "100");
- for (auto r : rb)
- cout << r << " ";
- cout << endl;
-
- return 0;
- }
复制代码 |
|