给定一个仅由数字组成的字符串S.我们需要将字符串分成4个整数,使得它们的总和最大。怎么解决这个问题?请帮忙
注意:每个整数应≤10^ 12且不应包含任何前导零。
每个字符串的大小也几乎为20。
示例:设S = 52310,则答案为56,因为4个整数为52,3,1,0。所以最大总和是56(52 + 3 + 1 + 0)。
如何有效地完成这项工作,因为我不想采用粗暴的解决方案,因为它的高度复杂性,因为在每个可用的4个位置进行拆分会导致非常无效的方法。
答案 0 :(得分:-1)
试试这个,但是在java
中 private void method()
{
String value = "52310";
String sortedString ;
int stringLength;
long total = 0;
char[] arr = value.toCharArray();
List<String> seperatedIntegers = new ArrayList<String>();
if(arr.length > 3)
{
sortedString = sort(arr);
stringLength = sortedString.length();
for(int m = 0 ; m < 3 ; m ++)
{
seperatedIntegers.add(sortedString.substring(stringLength - 1, stringLength));
stringLength--;
}
seperatedIntegers.add(sortedString.substring(0, stringLength));
}
if(seperatedIntegers.size() > 0)
{
for(int n = 0 ; n < seperatedIntegers.size() ; n ++)
{
total = total + Long.valueOf(seperatedIntegers.get(n));
}
}
Toast.makeText(getApplicationContext(), String.valueOf(total), Toast.LENGTH_LONG).show();
}
private String sort(char[] arr)
{
int temp;
String val = "";
List<Integer> sortedValues = new ArrayList<Integer>();
for(int i = 0; i < arr.length ; i ++)
{
sortedValues.add(Integer.valueOf(String.valueOf(arr[i])));
}
for(int j = 1; j < sortedValues.size(); j++)
{
for(int k = j; k > 0; k--)
{
if(sortedValues.get(k) > sortedValues.get(k-1))
{
temp=sortedValues.get(k);
sortedValues.set(k, sortedValues.get(k-1));
sortedValues.set(k - 1, temp);
}
}
}
for(int l = 0; l < sortedValues.size() ; l ++)
{
val = val + String.valueOf(sortedValues.get(l));
}
return val;
}