Java 将二进制字符串拆分为5的幂
我试图分割一个二进制字符串,这样就可以将字符串分割成最小的正整数,每个正整数都是5的幂。如果没有这样的碎片,则返回-1Java 将二进制字符串拆分为5的幂,java,string,Java,String,我试图分割一个二进制字符串,这样就可以将字符串分割成最小的正整数,每个正整数都是5的幂。如果没有这样的碎片,则返回-1 public class Power { public int numsOfWays(String s) { long[] f = new long[s.length() + 1]; f[0] = 0; for (int i = 1; i <= s.length(); ++i) { f[i]
public class Power {
public int numsOfWays(String s) {
long[] f = new long[s.length() + 1];
f[0] = 0;
for (int i = 1; i <= s.length(); ++i) {
f[i] = Integer.MAX_VALUE;
for (int j = 1; j <= i; ++j) {
if (s.charAt(j - 1) == '0') {
continue;
}
int num = Integer.parseInt(s.substring(j - 1, i), 2);
if (isPower(num)) {
f[i] = Math.min(f[i], f[j - 1] + 1);
}
}
}
return f[s.length()] == Integer.MAX_VALUE ? -1 : (int) f[s.length()];
}
private boolean isPower(long val) {
if (val == 0) {
return false;
}
int n = (int) (Math.log(val) / Math.log(5));
return Math.pow(5, n) == val;
}
public static void main(String[] args) {
Power b = new Power();
System.out.println(b.numsOfWays("111011100110101100101110111"));
}
}
问题出现在代码的第13行: 该行:
int num = Integer.parseInt(s.substring(j - 1, i), 2);
出现问题,因为该值太长,无法处理
将其更改为:
long num = Long.parseLong(s.substring(j - 1, i), 2);
它应该会起作用
编辑:整个代码如下所示:
public class Power {
public int numsOfWays(String s) {
long[] f = new long[s.length() + 1];
f[0] = 0;
for (int i = 1; i <= s.length(); ++i) {
f[i] = Integer.MAX_VALUE;
for (int j = 1; j <= i; ++j) {
if (s.charAt(j - 1) == '0') {
continue;
}
long num = Long.parseLong(s.substring(j - 1, i), 2);
if (isPower(num)) {
f[i] = Math.min(f[i], f[j - 1] + 1);
}
}
}
return f[s.length()] == Integer.MAX_VALUE ? -1 : (int) f[s.length()];
}
private boolean isPower(long val) {
if (val == 0) {
return false;
}
int n = (int) (Math.log(val) / Math.log(5));
return Math.pow(5, n) == val;
}
public static void main(String[] args) {
Power b = new Power();
System.out.println(b.numsOfWays("111011100110101100101110111")); // 5
System.out.println(b.numsOfWays("11111111111111111111111111111111111111111111111111")); // 50
}
}
您能否显示示例输入和预期输出?这将使您的问题更容易理解。在您发布的代码中,parseInt()不是整数,示例输入:1110111100110101100101110111,其输出必须是:5如果我没有错误计算数字,111011110011010110010111011100000这个数字太大,无法放入
int
@TimBiegeleisen示例代码:11111111111111111111111111111111111回答:50您使用的是哪种语言/编译器?在Java 8上运行得非常好,包括在线和本地机器。。
public class Power {
public int numsOfWays(String s) {
long[] f = new long[s.length() + 1];
f[0] = 0;
for (int i = 1; i <= s.length(); ++i) {
f[i] = Integer.MAX_VALUE;
for (int j = 1; j <= i; ++j) {
if (s.charAt(j - 1) == '0') {
continue;
}
long num = Long.parseLong(s.substring(j - 1, i), 2);
if (isPower(num)) {
f[i] = Math.min(f[i], f[j - 1] + 1);
}
}
}
return f[s.length()] == Integer.MAX_VALUE ? -1 : (int) f[s.length()];
}
private boolean isPower(long val) {
if (val == 0) {
return false;
}
int n = (int) (Math.log(val) / Math.log(5));
return Math.pow(5, n) == val;
}
public static void main(String[] args) {
Power b = new Power();
System.out.println(b.numsOfWays("111011100110101100101110111")); // 5
System.out.println(b.numsOfWays("11111111111111111111111111111111111111111111111111")); // 50
}
}
5
50