You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用Dart实现LeetCode回文数算法遭遇超时问题求助

用Dart解决LeetCode回文数问题时遇到超时错误

我正在使用Dart语言解决LeetCode上的回文数问题,尝试了6种不同的实现方案,每个方案对应一个独立的类。但所有方案在提交时都出现了**Time Limit Exceeded(超时)**错误。这些方案在本地终端用少量测试用例运行正常,但处理大数时就会触发错误。我不确定是Dart的while循环性能问题,还是LeetCode平台的问题。

以下是我的6种实现代码:

class A {
  bool isPalindrome(int x) {
    if (x < 0) {
      return false;
    }

    double divisor = 1;
    while (x / divisor >= 10) {
      divisor *= 10;
    }
    while (x != 0) {
      if ((x / divisor).truncate() != (x % 10).floor()) {
        return false;
      }
      x %= divisor.toInt();
      x = (x / 10).floor();
      divisor /= 100;
    }

    return true;
  }
}

class B {
  bool isPalindrome(int x) {
    if (x < 0 || (x % 10 == 0 && x != 0)) {
      return false;
    }

    int revNum = 0;
    while (x > revNum) {
      revNum = revNum * 10 + x % 10;
      x = (x / 10).floor();
    }

    return (x == revNum || x == revNum / 10);
  }
}

class C {
  bool isPalindrome(int x) {
    if (x < 0) {
      return false;
    }
    int y = 0;
    int xx = x;

    if (xx > 0) {
      y = y * 10 + xx % 10;
      xx = (xx / 10).floor();
    }
    return (y != x);
  }

  // while (xx > 0) {
  //   y = y * 10 + xx % 10;
  //   xx = (xx / 10).floor();
  // }
}

class D {
  bool isPalindrome(int x) {
    if (x.isNegative) return false;
    final list = convert(x);
    for (var i = 0; i < (list.length ~/ 2); i++) {
      if (list[i] != list[list.length - 1 - i]) return false;
    }
    return true;
  }

  List convert(int x) {
    final List<int> list = <int>[];

    while (x > 0) {
      list.add(x % 10);
      x = x ~/ 10;
    }
    return list;
  }
}

class F {
  bool isPalindrome(int x) {
    if (x.isNegative) return false;
    if (x == 0) return true;
    if (x % 10 == 0) return false;

    var reverted = 0, iter = x;
    while (iter > 0) {
      reverted = reverted * 10;
      reverted += iter % 10;
      iter = iter ~/ 10;
    }

    return reverted == x;
  }
}

class G {
  bool isPalindrome(int x) {
    if (x.isNegative) return false;

    var tens = 10;
    while (tens < x) tens *= 10;
    tens = tens ~/ 10;

    while (x > 10) {
      var lastDigit = x % 10;
      var firstDigit = x ~/ tens;

      if (lastDigit != firstDigit) return false;

      x -= firstDigit * tens;
      x = x ~/ 10;
      tens = tens ~/ 100;
    }

    return true;
  }
}

内容的提问来源于stack exchange,提问作者Ayoub Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:48:34