力扣每日一题 --- 972. 相等的有理数

力扣每日一题 --- 972. 相等的有理数_第1张图片

 本题中的一个难点是怎么判断是否相等,如果自己写判断的话是不是很麻烦,判断整数之后再去判断小数部分,那么我们这题的另一个难点就要登场了,第一个难点让本题的情况变得复杂,第二个难点让本题变得很难想到怎么判断,这时就要用到我们的数据量了,他是说小数点最少为四位数,那么两个数的最大公倍数就是12,也就是最多小数位12位之后那么肯定为一个周期了,超过12位的肯定是在重复了,没必要,那么可以将原有的字符串中的括号内的扩充到12位,再用库里的函数转成浮点数进行判断就可以做出这题了,这题最大难点就是解决判断小数部分,第一个难点比较容易解决,转成浮点数判断就行,这样就变成一个简单题了

class Solution {
public:
    bool isRationalEqual(string s, string t) 
    {
          auto decimal = [&](string x)->double
          {
               int l = x.find('('), r = x.find(')');
               if (l != -1 && r != -1)
               {
                   string left = x.substr(0, l);
                   string mid = x.substr(l + 1, r - l - 1);
                   string right = x.substr(r + 1);
                   string str = left + mid + mid + mid + mid + mid + mid + mid + mid + mid + mid + mid+ mid+mid+mid+right;
                   return atof(str.c_str());
               }
               else return atof(x.c_str());
          };
          return fabs(decimal(s) - decimal(t)) < 1e-8;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)