我正试图解决http://www.geeksforgeeks.org/nutanix-interview-experience-set-1-on-campus-for-internship/中的第一个问题。在这个问题中,我们给出了一串十进制数字,我们必须弄清楚是否有某种方法可以将它分成四个或更多个子串[“ A ”,“ B “,” C “,...],以便 A + B = C , B + C = D 等。
例如,如果字符串为"12358"
,则答案为true
,因为我们可以将其拆分为[“1”,“2”,“3”,“5”, “8”],其中1 + 2 = 3,2 + 3 = 5,3 + 5 = 8。
同样,如果字符串为"199100199"
,则答案为true
,因为我们可以将其拆分为[“1”,“99”,“100”,“199”],其中1 + 99 = 100和99 + 100 = 199。
但是,如果字符串是"2368"
,那么答案是false
,因为只有办法将其分解为四个或更多个子串 - 即[“2”,“3”,“ 6“,”8“] - 和3 + 6≠8。
我可能会想到使用两个或三个嵌套循环的解决方案,但我认为我需要一个更有效的解决方案?
答案 0 :(得分:1)
public static boolean test3(String s, String d1, String d2, int idx1, int idx2) {
if(idx1>=s.length()) return false;
if(idx2>=s.length()) {
d1 = s.substring(0,idx1);
return test3(s,d1,d2,idx1+1,1);
}
if(!d1.isEmpty() && d1.length()+idx2<=s.length()) {
d2 = s.substring(d1.length(),d1.length()+idx2);
int sum = Integer.parseInt(d1) + Integer.parseInt(d2);
String sumStr = Integer.toString(sum);
if(s.substring(d1.length()+d2.length()).startsWith(sumStr)) {
return true;
} else {
return test3(s,d1,d2,idx1,idx2+1);
}
} else {
d1 = s.substring(0,idx1);
return test3(s,d1,d2,idx1+1,idx2);
}
}
我尝试了上述内容,似乎有效。这是我的解决方案