字符串分割

标题:字符串分割 | 时间限制:3秒 | 内存限制:262144K | 语言限制:
定非空字符串s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功,则返回0
2、若分割成功且分割结果不唯一,则返回-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);
}


全部评论

相关推荐

牛客52811839...:实习要写出来业务和产出,你这写的像流水账没人看。项目经历也没有,换个极简简历试试
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务