用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
相关产品推荐
相关产品推荐

