algorithm - 为什么不通过代码战中问题平衡数字的所有测试用例?
问题描述
目前我正在对平衡数字的代码战进行挑战,我在 dart 中编写了代码,它成功完成了 100 个测试用例,但是对于长数字它不能正常工作......所以我认为它需要一些条件来处理这个长数字:
String balancedNum(numb) {
// your code here
var numb1 = numb.toString();
List a = numb1.split("");
var left_sum = 0;
var right_sum = 0;
for (var i = 0; i <= a.length / 2; i++) {
left_sum += int.parse(a[i]);
}
List<String> b = a.reversed.toList();
//print(b);
for (var i = 0; i < b.length / 2; i++) {
right_sum += int.parse(b[i]);
}
//print(right_sum);
if (left_sum == right_sum) {
return 'Balanced';
} else {
return 'Not Balanced';
}
}
挑战链接:https ://www.codewars.com/kata/balanced-number-special-numbers-series-number-1/train/dart
解决方案
您的问题与“长数字”无关,因为您对使用数字的测试用例进行编码也失败了13
。
您正确地没有阅读以下规则:
如果数字有奇数位,则只有一个中间数字,例如 92645 的中间数字为 6;否则,有两个中间数字,例如 1301 有中间数字 3 和 0
在确定一个数是否平衡时,不应考虑中间数字,例如 413023 是一个平衡数,因为左和右和都是 5。
因此,您需要测试数字是偶数还是奇数,因为我们需要使用该信息来知道我们应该在每边的总和中使用多少位数。
我在以下实现中做到了这一点:
String balancedNum(int numb) {
final numb1 = numb.toString();
final a = numb1.split("");
var split = (a.length / 2).floor();
if (a.length % 2 == 0) {
split--; // the number is even
}
var left_sum = 0;
var right_sum = 0;
for (var i = 0; i < split; i++) {
print(a[i]);
left_sum += int.parse(a[i]);
}
final b = a.reversed.toList();
for (var i = 0; i < split; i++) {
right_sum += int.parse(b[i]);
}
if (left_sum == right_sum) {
return 'Balanced';
} else {
return 'Not Balanced';
}
}
推荐阅读
- sql - SQL Server 中的字符串值移位
- java - 定义 Android 和 IOS Xpath 时,Appium Page factory 如何选择正确的 xpath
- algorithm - 获取任何节点的顶级父节点
- python - 如何在 Python 中同时发生两件不同的事情?
- scala - 将 JSON 加载到 Spark SQL
- ios - drawRect 无效上下文
- google-cloud-platform - 从 Bigquery 中的原始 Google 分析会话数据替换流量源?
- javascript - 如何检测云火库功能 onUpdate() 中添加的新字段
- python - 如何比较两个str值数据框python pandas
- python-3.x - 为什么以小数倒数会导致 xxx.9999999999999999999x?