2、标题:字符串分割
【字符串分割】给定非空字符在s,将该字符串分割成一些子串,使每个子串的ASCIIA码值的和均为水仙花数。
1、若分割不成功则返回 0
2、若分割成功且分割结果不唯一则返回-1
3、若分割成功且分割结果唯一,则返回分割后的子串数目
输入描述: 1、输入字符串的最大长度为 200
输出描述:根据题目描述中情况返回相应的结果
备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。
示例:
输入
abc
输出
0

def partition_sxhs(s):
    ord_arr = [ord(x) for x in s]

    def is_sxhs(n):
        """判断是否为水仙花数"""
        if n < 100 or n > 999:
            return False
        a = n % 10
        b = (n - a) // 10 % 10
        c = (n - a - b * 10) // 100 % 10
        if n == a ** 3 + b ** 3 + c ** 3:
            return True
        return False

    def backtrack(origin_list, tmp_list, result):
        """回溯算法"""
        if not origin_list:
            result.append(tmp_list[:])
            return
        for i in range(1, len(origin_list) + 1):
            this_list = origin_list[:i]
            # 先截取出来一个水仙花数,再递归数组剩余部分
            if is_sxhs(sum(this_list)):
                tmp_list.append(this_list)
                backtrack(origin_list[i:], tmp_list, result)
                tmp_list.pop()

    tmp_list, result = [], []
    backtrack(ord_arr, tmp_list, result)
    print(result)
    if len(result) == 0:
        return 0
    elif len(result) > 1:
        return -1
    elif len(result) == 1:
        return len(result[0])


print(partition_sxhs("Gddd$Gddd"))