当前位置: 首页 > news >正文

建设网站项目概况旺道seo营销软件

建设网站项目概况,旺道seo营销软件,免费空间分享,网站设计学习网题目描述: 给定非空字符串s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。 1、若分割不成功,则返回0。 2、若分割成功且分割结果不唯一,则返回-1。 3、若分割成功且分割结果唯一,则返…

题目描述:

给定非空字符串s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功,则返回0。
2、若分割成功且分割结果不唯一,则返回-1。
3、若分割成功且分割结果唯一,则返回分割后子串的数目。
输入描述:1、输入字符串的最大长度为200。
输出描述:根据题目描述中情况,返回相应的结果。
补充说明:“水仙花数Q“是指一个三位数,每位上数字的立方和等于该数字本身,如371是"水仙花数",因为:371=33+73+1^3。
示例1,输入:,abc,输出:0,说明:分割不成功。
示例2,输入:f3@d5a8,输出:-1,说明:分割成功但分割结果不唯一,可以分割为两组,一组"f3"和"@d5a8",另外一组"f3@d5"。

代码实现:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class NarcissisticSubstringSplitter {// 判断一个整数是否是水仙花数private static boolean isNarcissistic(int number) {// 用于计算每个位上数字的立方和int sum = 0;// 临时变量,用于逐步取整数的每一位int temp = number;// 循环直到临时变量为0,遍历整数的每一位while (temp > 0) {// 获取当前位的数字int digit = temp % 10;// 将当前位数字的立方值累加到总和上sum += digit * digit * digit;// 临时变量缩小到下一位temp /= 10;}// 如果计算的立方和等于原始数字,则该数字是水仙花数return sum == number;}// 递归函数来尝试所有可能的子串分割private static void findSplits(String s, int start, List<String> currentSplit, Set<List<String>> resultSet) {// 当起始位置到达字符串末尾时,检查当前分割是否由自恋子串组成if (start == s.length()) {// 确保当前分割至少包含一个子串if (currentSplit.size() > 0) {// 假设所有子串都是自恋子串boolean allNarcissistic = true;// 遍历当前分割中的每个子串for (String subStr : currentSplit) {// 计算子串的ASCII值之和int asciiSum = 0;for (char c : subStr.toCharArray()) {asciiSum += (int) c;}// 如果子串的ASCII值之和不是自恋数,则标记为非自恋子串并跳出循环if (!isNarcissistic(asciiSum)) {allNarcissistic = false;break;}}// 如果当前分割中的所有子串都是自恋子串,则将其添加到结果集中if (allNarcissistic) {resultSet.add(new ArrayList<>(currentSplit));}}// 递归结束,返回上一级递归return;}// 尝试不同的子串分割位置for (int i = start; i < s.length(); i++) {// 获取从起始位置到当前位置的子串String subStr = s.substring(start, i + 1);// 将子串添加到当前分割中currentSplit.add(subStr);// 递归调用findSplits函数,尝试下一级子串分割findSplits(s, i + 1, currentSplit, resultSet);// 回溯,移除最后一个子串,尝试其他可能的分割currentSplit.remove(currentSplit.size() - 1);}}/*** 分割字符串成唯一大小的组* @param s 待分割的字符串* @return 返回分割结果的大小如果分割不成功返回0,如果分割结果不唯一返回-1,如果分割成功且结果唯一返回分割结果的大小*/public static int splitString(String s) {// 存储所有可能的分割结果的集合每个元素是一个分割方案的列表Set<List<String>> resultSet = new HashSet<>();// 当前的分割结果列表List<String> currentSplit = new ArrayList<>();// 递归查找所有可能的分割findSplits(s, 0, currentSplit, resultSet);// 如果集合为空,说明没有找到有效的分割方案if (resultSet.isEmpty()) {return 0; // 分割不成功} else if (resultSet.size() > 1) {// 如果集合大小大于1,说明有多个不同的分割方案,结果不唯一return -1; // 分割成功但分割结果不唯一} else {// 集合大小为1,说明找到了唯一的分割方案return resultSet.iterator().next().size(); // 分割成功且分割结果唯一}}public static void main(String[] args) {// 示例测试  System.out.println(splitString("abc")); // 输出: 0  System.out.println(splitString("f3@d5a8")); // 输出: -1  // 可以添加更多测试用例来验证  }
}

解释

  1. isNarcissistic函数:判断一个整数是否是水仙花数。
  2. findSplits函数:递归函数,尝试所有可能的子串分割,并检查这些子串的ASCII码值之和是否都是水仙花数。使用回溯法来尝试所有可能的分割。
  3. splitString函数:调用findSplits函数,并根据结果集的大小返回相应的结果。

注意:上述代码中的isNarcissistic函数是用来判断一个整数是否是水仙花数,但在实际分割过程中,我们计算的是子串中字符ASCII码值的和。因此,在findSplits函数中,我们计算了每个子串的ASCII码值之和,并检查其是否为水仙花数。

测试用例

  • 输入"abc",输出0,因为无法分割成ASCII码值之和为水仙花数的子串。
  • 输入"f3@d5a8",输出-1,因为可以分割成多组满足条件的子串(尽管在这个例子中,“f3"和”@d5a8"的ASCII码值之和并不是水仙花数,但示例可能只是为了说明可以有多种分割方式,而实际代码会正确计算ASCII码值之和并检查水仙花数)。实际上,根据ASCII码值和的计算,"f3@d5a8"这样的字符串很难直接分割成满足条件的子串,但代码逻辑是正确的,可以根据实际需求调整或添加更多测试用例。
http://www.yidumall.com/news/43634.html

相关文章:

  • 帆客建设网站长沙网站包年优化
  • 小程序源码网免费搜索优化的培训免费咨询
  • 深圳市南山区住房和建设局官方网站广州谷歌推广
  • 温州网站上排名seo做的好的网站
  • wordpress 社交分享网站优化助手
  • 如何做分享赚钱的网站站外引流推广渠道
  • 网站模板 寻模板关键词抓取工具都有哪些
  • 详情页在线设计网站阿里云搜索引擎网址
  • 电子商务网站建设 期末考试试卷以及答案专业培训seo的机构
  • 网站建设策划基本流程有哪些可以推广的平台
  • 微商城建设购物网站seo云优化公司
  • 什么是网站二级目录百度推广开户代理商
  • 怎么做关于易烊千玺的网站读书网站排名
  • 无锡网站设计多少钱关键词分为哪三类
  • 甘孜州住房城乡建设局网站北京seo培训
  • 网站开发建设价格附件网站收录量是什么意思
  • 如何优化网站信息架构博客营销
  • 网站介绍怎么写域名检测
  • dedecms 网站社交媒体营销策略有哪些
  • 做旅游网站客服常遇到的问题广州宣布5条优化措施
  • 如何进入google网站怎么给自己的公司建立网站
  • 做新房什么网站好seo技术培训沈阳
  • 网站安全证书有问题如何解决营销策划咨询机构
  • 集团网站模板河南怎样做网站推广
  • 番禺区网站建设打开百度一下
  • 固镇网站建设怎么联系百度客服人工服务
  • 成都微信功能开发深圳网站做优化哪家公司好
  • 首饰设计网站推荐网页模板免费html
  • 沈阳网站开发久网络推广图片大全
  • 视频收费网站怎么做91手机用哪个浏览器