黑色海 发表于 2013-10-6 20:41
简单做了一下, 如果有BUG,还望告知
Console.WriteLine("请您输入一个数字");
int number=Con ...
黑色海 发表于 2013-10-6 20:41
简单做了一下, 如果有BUG,还望告知
Console.WriteLine("请您输入一个数字");
int number=Con ...
haxyek 发表于 2013-10-6 21:52
想法一样。。
还可以用char数组,比较相邻两位是否相等。。
想起没判断不匹配的了,又改了改复制代码
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * 思路:不太会解释,拿个例子说吧。好比1223311:
- * 第一次查找,找到了22,就让1223311先变成1220000再加上10000,最后变为:1230000
- * 第二次查找,找到了00,就让1230000先变成1230000,在加上100,最后变为:1230100;
- * 第三次查找,找到00,就让1230100先变成1230100,在加入1,最后变为1230101;
- */
- public class Test1 {
- public static void main(String[] args) throws InterruptedException{
- String num = "1989";
- Pattern p = Pattern.compile("(\\d)\\1{1,}\\d*");
- Matcher m = p.matcher(num);
- int len = num.length();
- //添加一个标记,判断是否是第一次处理
- boolean flag = false;
- while(true){
- if(m.find()){
- //找到匹配的结尾下标
- int index = m.end(1);
- //得到下标之后的值,其实就是将相同的那一位加一,之后如果有位就变为0,避免一直加1.
- Integer value = (int)Math.pow(10, len-index-1);
- //获得末尾有多少个0
- String subStr0 = num.substring(0, index+1);
- //之前的字符串
- String subStr1 = value.toString().substring(1);
- //将两个串起来
- num = subStr0.concat(subStr1);
- //加值操作
- Integer sum = Integer.parseInt(num) + value;
- num = sum.toString();
- //重新匹配
- m = p.matcher(num);
- flag = true;
- //测试看每次打印的结果
- System.out.println(num);
- }else{
- if(!flag){
- Integer sum = Integer.parseInt(num) + 1;
- num = sum.toString();
- //重新匹配
- m = p.matcher(num);
- }else{
- break;
- }
- }
- }
- //最终结果
- System.out.println(num);
- }
- }
追影 发表于 2013-10-7 00:36
好方法,最直接清晰的思路,不过有一个问题,如果是高位相同的话,而且给定的整数又很大,一位一位的加,效率有 ...
追影 发表于 2013-10-7 00:36
好方法,最直接清晰的思路,不过有一个问题,如果是高位相同的话,而且给定的整数又很大,一位一位的加,效率有 ...
追影 发表于 2013-10-7 00:36
好方法,最直接清晰的思路,不过有一个问题,如果是高位相同的话,而且给定的整数又很大,一位一位的加,效率有 ...
大虾挂了 发表于 2013-10-8 13:36
发现我上面说的有BUG ,比如12989这个数字就处理不对了。。。。。
而对于129890这个数字,更难处理了。
还 ...
大虾挂了 发表于 2013-10-8 13:42
第二行搞错,想说的是129898989各种89结尾的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |