字符串分割
标题:字符串分割 | 时间限制:3秒 | 内存限制:262144K | 语言限制:
定非空字符串s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功,则返回02、若分割成功且分割结果不唯一,则返回-1
3、若分割成功且分割结果唯一,则返回分割后子串的数目
#include <iostream>
#include <sstream>
using namespace std;
class Main {
public:
int getRes(string& s) {
int res = recur(s, 0, s.length() - 1);
if (res == 0) {
return 0;
}
if (res == 1) {
return subNum;
}
if (res == -1) {
return -1;
}
return 0;
}
private:
int recur(string &s, int l, int r) {
if (l > r) {
return 1;
}
int sum = 0;
int val = 0;
for (int pos = l; pos <= r; pos++) {
val += s[pos];
if (val < 100) {
continue;
}
if (val > 999) {
break;
}
if (isFlowerNum(val)) {
int rs = recur(s, pos + 1, r);
if (rs == -1) {
return -1;
}
else if (rs == 1) {
sum++;
}
}
}
if (sum == 1) {
subNum++;
return sum;
}
else if (sum > 1) {
return -1;
}
return 0;
}
bool isFlowerNum(int v) {
int sum = v;
int a = v / 100;
v -= a * 100;
int b = v / 10;
int c = v - b * 10;
return (sum == (a * a * a + b * b * b + c * c * c));
}
int subNum = 0;
};
int main() {
string s;
getline(cin, s);
int len = s.length();
cout << Main().getRes(s);
}
