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

没有详细的统计过大家的解法

很多都在回复内贴的代码)。但感觉大家的问题主要集中在计算大数的效率上。提供一种“经验”算法供大家参考。

题目按照我的理解,大致为输入99,返回101。输入199,返回201这类的。

按照人类的(其实就是我的。。哈哈)解题方式,算法分析如下:

1. 9为特殊字符

如果这串数字的某一位和其上一位均为9,则需要返回类似“101”这样的数值。

2. 首位和次位(左起第二位)均为9为特殊情况

在这种情况下,需进位(增加数字一位)。

3. 解决连续两位重复的方式为将低位数字+1(9已经当作特殊情况处理,这种情况下不可能为9)。之所以加低位是因为需要返回最小的。

4. 任何一个数字提升(+1)后,其所有次位(例如1881111中的188变为189,所有次位为1111)都变得不重要。根据“经验”可得知,最小数为所有前位(189)加上(0101)。其中“0101”为固定不重复最小值,其长度与数字所有次位的长度相同,以0开头,用1间隔(依据“不重复数”条件分析而来)。

5. 由于可能在“99”处理后造成前一位与前两位重复(例如12199变为12201,造成了新的重复),在处理完成后重新调用函数自身进行二次处理。中断条件为结果字串中未发现重复的两位(即“不重复数”)。

如果按照此思路进行解题运算,大多数情况下算法复杂度只为O(n) (我其实不会算算法复杂度,高手可以提示一下这种算法的复杂度该如何计算。只是要表达和长度相关的意思)

代码全文

1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Text.RegularExpressions;
6: using System.Collections.ObjectModel;
7:
8: namespace SubStringFrequency
9: {
10: class Program
11: {
12: static void Main(string[] args)
13: {
14: var consoleInput = Console.ReadLine();
15: long baseNumber = long.Parse(consoleInput);
16:
17: Console.WriteLine(getAvaliableNum(baseNumber));
18: }
19:
20: private static string getAvaliableNum(long consoleInput)
21: {
22: if (consoleInput < 10) //single number
23: {
24: return consoleInput.ToString();
25: }
26:
27: string temp = consoleInput.ToString();
28: var reach = 0;
29: StringBuilder result = new StringBuilder();
30: for (int i = 1; i < temp.Length; i++)
31: {
32: var currentNum = temp[i];
33: var nextNum = temp[i - 1];
34: if (currentNum == nextNum)
35: {
36: reach += 1;
37: if (currentNum == '9')
38: {
39: if (i == 1)
40: {
41: result.Append('1');
42: result.Append(getMimimumUniqueNumByLength(temp.Length));
43: break;
44: }
45: else
46: {
47: var hiNumber = int.Parse(result[result.Length - 1].ToString()) + 1;
48: result.Remove(result.Length - 1, 1);
49: result.Append(hiNumber);
50: result.Append(getMimimumUniqueNumByLength(temp.Length - i + 1));
51: break;
52: }
53: }
54: else
55: {
56: result.Append(nextNum);
57: result.Append(int.Parse(currentNum.ToString()) + 1);
58: result.Append(getMimimumUniqueNumByLength(temp.Length - i - 1));
59: break;
60: }
61:
62: }
63: else
64: {
65: result.Append(nextNum);
66: if (i == temp.Length - 1)
67: {
68: result.Append(currentNum);
69: }
70: }
71: }
72:
73: var resultString = string.Empty;
74:
75: if (reach > 0)
76: {
77: resultString = getAvaliableNum(long.Parse(result.ToString()));
78: }
79: else
80: {
81: resultString = result.ToString();
82: }
83: return resultString;
84: }
85:
86: private static string getMimimumUniqueNumByLength(int length)
87: {
88: StringBuilder sb = new StringBuilder();
89: var temp = 0;
90: for (int i = 0; i < length; i++)
91: {
92: sb.Append(temp);
93: if (temp == 0)
94: {
95: temp = 1;
96: }
97: else if (temp == 1)
98: {
99: temp = 0;
100: }
101: }
102: return sb.ToString();
103: }
104: }
105: }

结论

http://www.cnnetsun.cn/news/3174276.html

相关文章:

  • 昭通高口碑黄金回收白银回收
  • 明日方舟自动化助手终极指南:5个智能技巧彻底改变你的游戏体验
  • 亲测工业制造GEO优化效果真的值吗?
  • NumPy基础:科学计算入门
  • 知识加工模块与博客工厂模块的状态重新定义
  • C# GeneratedRegex:面向对象语言的“底层性能突围
  • Codex Windows Sandbox 启动失败:CreateProcessAsUserW failed: 2 的原因与修复
  • SnapClick 1.1.1 更新速递:右键秒开 / 多编辑器打开 / 录屏 HUD / 毛玻璃透明度
  • 2-1注释,数据类型,与input的使用方法
  • 新闻项目---项目结构
  • 卡梅德生物技术快报|构建噬菌体肽库:全质粒 PCR 克隆优化、NGS 序列偏倚分析与淘选数据定量解析
  • Windows C++编译 Paddle Inference 3.5.0 GPU 版本完整指南
  • Win10 家庭版启用组策略 gpedit.msc:3步解决本地安全策略缺失问题
  • SQL Server 2022 嵌套查询实战:3类子查询与连接查询性能对比分析
  • MySQL 8.0 连接查询深度解析:5种JOIN执行过程与适用场景图解
  • OTB-2015 与 VOT2023 数据集对比:从 100 个序列到 60 个挑战的 10 年演进分析
  • AI 时代,学会R之后,很多人后悔了
  • Unity AssetBundle 2022.3 内存泄漏排查:3种 Unload 误用场景与 Profiler 取证
  • PointNet++ 与 PointNet 性能对比:3类任务、5个指标下的模型效率与精度分析
  • 构建本地化翻译知识库:使用 Llama 3.1 8B 微调专属教材翻译模型的 5 个步骤
  • Linux Audio 驱动调试:ACDB 文件加载失败 4 种常见原因与排查方法
  • StatefulSet vs Deployment 深度对比:5个关键差异与3个典型选型场景
  • Linux 压缩工具性能对比:tar/gzip/bzip2/xz 在 10GB 文件下的耗时与压缩率
  • Adam 优化器超参数 β1/β2 调优实战:从理论到 5 组实验对比
  • 呼市短视频陪跑服务哪家靠谱?中小企业轻量化 GEO + 短视频方案
  • macOS crontab 与 launchctl 对比:5个关键差异与3个典型场景选择
  • 反向传播 3 大常见问题:梯度消失、爆炸与 ReLU 死区排查
  • ThinkPHP、Log4j2、Spring框架漏洞深度复现与原理剖析实战指南
  • ORB-SLAM2 与 LSD-SLAM 对比:3类场景下前端跟踪算法性能实测分析
  • CHKDSK 与 found.000 深度解析:从文件系统原理到 .chk 文件手动修复