分割字符串(每个子串的ASCII码值的和均为水仙花数)

2023-10-31

给定非空字符串在s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功则返回 0
2、若分割成功且分割结果不唯一则返回-1
3、若分割成功且分割结果唯一,则返回分割后的子串数目
备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为: 371=33+73+1^3

package com.OD.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class test3 {
    /**
     * 给定非空字符串在s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
     * 1、若分割不成功则返回 0
     * 2、若分割成功且分割结果不唯一则返回-1
     * 3、若分割成功且分割结果唯一,则返回分割后的子串数目
     * 备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        // 超过长度200,返回分割不成功
        if (line.length() > 200) {
            System.out.println(0);
        }

        StringBuilder sb = new StringBuilder();
        ArrayList<String> strings = new ArrayList<>();
        char[] chars = line.toCharArray();
        System.out.println("chars:"+ Arrays.toString(chars));
        digui(chars, sb, strings, 0);

        // 分割成功且分割结果不唯一则返回-1
        if (strings.size() > 1) {
            System.out.println(strings);
            System.out.println(-1);
        }
        // 分割结果唯一打印分割的子串个数
        if (strings.size() == 1) {
            System.out.println(strings);
            System.out.println(strings.get(0).split(" ").length);
        }
        // 分割不成功则返回 0
        if (strings.size() == 0) {
            System.out.println(0);
        }
    }

    public static void digui(char[] chars, StringBuilder sb, ArrayList<String> strings, int startIndex) {
        int num = 0;
        StringBuilder sb_temp = new StringBuilder();
        for (int i = startIndex; i < chars.length; i++) {
            char aChar = chars[i];
            num += aChar;
            sb_temp.append(aChar);

            if (!isNar(num)) {
                continue;
            }

            StringBuilder sb_copy = new StringBuilder(sb);
            sb_copy.append(sb_temp).append(" ");

            if (i == chars.length - 1) {
                strings.add(sb_copy.toString().trim());
                return;
            }

            digui(chars, sb_copy, strings, i + 1);
        }
    }

    // 判断是否是水仙花数
    public static boolean isNar(int num) {
        if (num < 100 || num > 999) return false;
        int bai = num / 100;
        int shi = (num % 100) / 10;
        int ge = (num % 100) % 10;
        // Math.pow(底数x,指数y)
        int v = (int) (Math.pow(bai, 3) + Math.pow(shi, 3) + Math.pow(ge, 3));
        return v == num;
    }
}

原链接:https://www.peiluming.com/article/63

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分割字符串(每个子串的ASCII码值的和均为水仙花数) 的相关文章

  • 面试题(vue,react,前端)

    目录 1 说说React生命周期中有哪些坑 如何避免 2 说说Real diff算法是怎么运作的 3 调和阶段setState干了什么 4 说说redux的实现原理是什么 写出核心代码 5 React合成事件的原理 6 React组件之间如

随机推荐

  • java后端生成图形验证码、前端接收并展示

    1 工具类 import java awt Color import java awt Font import java awt Graphics import java awt Graphics2D import java awt Ren
  • PHP中的数据类型有哪些?

    嗨 大家好 今天 我们来了解一下PHP中的数据类型 首先 让我们来介绍一下PHP中的基本数据类型 在PHP中 有六种基本数据类型 它们分别是 整数型 int 用于存储整数 例如 123 456等 浮点型 float 用于存储带有小数点的数
  • Linux删除文件后,发现磁盘空间没有释放-lsof

    最近碰到磁盘快满了 原因是程序错误导致日志爆炸性增长 于是直接删除日志文件 然后df h 发现磁盘空间一点都没下降 还是原来的90 使用率 有点奇怪 百度了解到 日志文件被删除之前文件处于被其他进程占用状态 即使删除 依然占用空间 通过ls
  • STL源码分析:sort函数

    目录 支持sort的容器 几种涉及到的排序算法 插入排序 快速排序 堆排序 sort函数的策略 sort函数的实现 STL的sort函数非常常用 不同的STL版本有不同的实现方式 本文就来说一下SGI STL中是如何实现sort函数的 so
  • 408计算机网络(王道版)

    408计算机网络第一章总结 408计算机网络第二章总结 408计算机网络第三章总结 408计算机网络第四章总结 408计算机网络第五章总结 408计算机网络第六章总结 408计算机网络第一轮反思
  • QHash 与 QMap的区别

    QMap QMap是Qt的一个模板类 它是基于红黑树算的的一套字典 是Qt容器中的一种 它的原型是 QMap原型为class QMap
  • 2023.01.11 某国企前端笔试题一部分

    什么时候开始记录都不算晚 即使已经是晚了 但是再早的东西也会有淘汰的时候 收藏另说 问题主要选取一些高频和基础的问题 问题的回答只是本人的理解 非参考答案 有些答案只给个提示 详解可谷歌百度或在掘金内搜索相关文章 同时本人每次回顾更新文章都
  • 大数据-玩转数据-Flink定时器

    一 说明 基于处理时间或者事件时间处理过一个元素之后 注册一个定时器 然后指定的时间执行 Context和OnTimerContext所持有的TimerService对象拥有以下方法 currentProcessingTime Long 返
  • MYSQL面试题

    1 什么是MySQL多实例 如何配置MySQL多实例 多实例的优缺点 答案 https blog 51cto com superpcm 2094744 2 如何加强MySQL数据的安全 请你给出可行的思路 答案 https blog csd
  • 李开复李彦宏奥特曼获评全球AI领袖,《时代》出品,全球100人

    西风 发自 凹非寺量子位 公众号 QbitAI 时代周刊 首次发布世界AI最具影响力人物榜 100位学界业界大佬齐聚于此 这其中就包括吴恩达教授 李飞飞教授 创新工场CEO李开复 百度CEO李彦宏 OpenAI CEO Sam Altman
  • 【软件测试】快速入行软件测试

    快速入行软件测试 1 初识软件测试 软件测试的前景与现状 软件测试越来越被企业重视 人才稀缺 市场需求扩大 软件测试人员的职业生涯规划 技术型路线 自动化测试工程师 性能测试工程师 安全测试工程师等 管理型路线 测试主管 测试经理 测试总监
  • 解决Python配置Opencv报错recursion is detected during loading of "cv2" binary extensions的问题

    解决Python配置Opencv报错recursion is detected during loading of cv2 binary extensions的问题 使用pip卸载opencv pip uninstall opencv 具体
  • UNIX网络编程(UNP) 第四章学习笔记

    文章目录 总括内容 socket函数 函数定义 常用套路 具体解释 题外话 connect函数 函数定义 常用套路 具体解释 题外话 实战尝试 bind函数
  • STL中用ERASE()方法遍历删除元素

    STL中的容器按存储方式分为两类 一类是按以数组形式存储的容器 如 vector deque 另一类是以不连续的节点形式存储的容器 如 list set map 在使用erase方法来删除元素时 需要注意一些问题 在使用 list set
  • 论文阅读笔记4——MOTR: End-to-End Multiple-Object Tracking with TRansformer(利用Transformer进行多目标跟踪)

    首个完全基于端到端 Transformer 的多目标追踪模型 21年5月上传到arxiv上 论文 论文 代码 代码 space 1 Abstract 摘要大概由两部分组成 一是过去启发式算法的缺陷 二是MOTR的基本思路 他说MOT问题的关
  • BitLocker解锁与关闭

    我的电脑由于出厂是设置了BitLocker的 进入PE系统后 电脑磁盘驱动器都是锁着的 打不开 必须解锁后才能在PE系统里访问 于是找恢复秘钥 进入网址https support microsoft com zh cn help 40261
  • jsp+servlet+mysql实现的CRM客户关系管理系统源码+运行教程

    今天给大家演示一下如何将一款由jsp servlet mysql实现的房地产公司crm客户关系管理系统运行部署起来 该系统实现了客户关系管理的所有功能 如客户信息录入 客户分配 客户跟进 客户关怀等等 系统角色分为管理员 员工 领导三个 可
  • 参数估计与假设检验的通俗理解

    文章目录 参数估计 假设检验 参数估计 For 高手 参数估计 parameter estimation 统计推断的一种 根据从总体中抽取的随机样本来估计总体分布中未知参数的过程 从估计形式看 区分为点估计与区间估计 从构造估计量的方法讲
  • 基于vgg网路和python flask设计的图像风格迁移系统(毕设 完整的代码+报告)

    项目概述 风格迁移是一个的计算机视觉中的常见任务 在日常生活中也有广泛应用 其主要内容就是将一张照片转化成另外一种风格 而保持原内容基本不变 在以往的研究中 有关风格转移的方法以及改进方法已经较为成熟 本项目中我们学习总结前人的经验 从 基
  • 分割字符串(每个子串的ASCII码值的和均为水仙花数)

    给定非空字符串在s 将该字符串分割成一些子串 使每个子串的ASCII码值的和均为水仙花数 1 若分割不成功则返回 0 2 若分割成功且分割结果不唯一则返回 1 3 若分割成功且分割结果唯一 则返回分割后的子串数目 备注 水仙花数 是指一个三