Codewars编程刷题学习2(Java)Create Phone Number-有时候越简单的题越容易被人想得很难

点此欢迎光临我的个人网站【一几文星球】

题目:

Write a function that accepts an array of 10 integers (between 0 and 9), that returns a string of those numbers in the form of a phone number.

编写一个函数,该函数接受一个由 10 个整数(0 到 9 之间)组成的数组,以电话号码的形式返回这些数字的字符串。

Example:

Kata.createPhoneNumber(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}) // => returns "(123) 456-7890"

The returned format must be correct in order to complete this challenge.
Don't forget the space after the closing parentheses!

返回的格式必须正确才能完成此挑战。
不要忘记右括号后的空格!

刚看完题目,条件性的在脑海里想手机号码的规则,11位,前三位有特定的规则...

等看到后面的例子,what? 这是电话号码?座机号码吗?然后默默背了下小时候家里的座机号码,也不像啊,算了,跑题了,不管了按题目的例子来。

这个题一开始想到的方案就是拼接,然后立马又给自己否认了,-不可能,哪能这么简单啊!

于是开始推敲规则,思考怎样的循环好实现,然后发现越搞越复杂了...

后面一想有简单的方式干嘛不用,大不了我提交后去看看大神们怎么实现的,反正我又不是大神,用幼稚的方式实现那也是实现啊,应该不会被笑吧。

My Solutions (我的解决方案):

最后红线那句话的意思是:36 种类似的代码变体与这个组合在一起。

亏我之前各种脑补,原来这就是普遍选择的解决方案啊,原来是我把题想难了。

当然也有大神们选择了正则表达式或者循环,两个字,佩服!

Best Practices(最佳实践):

最高赞的方案-

public class Kata {
  public static String createPhoneNumber(int[] numbers) {
    return String.format("(%d%d%d) %d%d%d-%d%d%d%d",numbers[0],numbers[1],numbers[2],numbers[3],numbers[4],numbers[5],numbers[6],numbers[7],numbers[8],numbers[9]);
  }
}

501 similar code variations are grouped with this one(501 个类似的代码变体与这个归为一组)

这个算是正则+拼接吧,看来我真的应该要去多研究研究正则了。

高赞第二的方案-

public class Kata {
  public static String createPhoneNumber(int[] numbers) {
    return String.format("(%d%d%d) %d%d%d-%d%d%d%d", java.util.stream.IntStream.of(numbers).boxed().toArray());
  }
}

正则+stream流,提交类似方案的人不多,5个。

高赞第三的方案-

public class Kata {
  public static String createPhoneNumber(int[] numbers) {
    String phoneNumber = new String("(xxx) xxx-xxxx");
    
    for (int i : numbers) {
      phoneNumber = phoneNumber.replaceFirst("x", Integer.toString(i));
    }
    
    return phoneNumber;
  }
}

看到一个用循环的了,循环+字符替换,一个字,绝!

还有一类方案使用了多个循环,个人觉得哈,代码量有点多了。

public class Kata {
  public static String createPhoneNumber(int[] numbers) {
    // Your code here!
    StringBuilder sb = new StringBuilder();
    sb.append("(");
    //int start = 0
    for(int i = 0;i<3;i++){
      sb.append(String.valueOf(numbers[i])); 
    }
    sb.append(") ");
    for(int i = 3;i<6;i++){
      sb.append(String.valueOf(numbers[i]));
    }
    sb.append("-");
    for(int i= 6;i<10;i++){
      sb.append(String.valueOf(numbers[i]));
    }
    return sb.toString();
  }
}

虽然只做了两道题,但是已经体会到刷题特别是很多人一起刷题的乐趣了,端午放假可能不会刷题,希望收假后还能记得来继续刷题。

最后来一句应景的端午安康!

 

点此欢迎光临我的个人网站【一几文星球】

上一篇:编程刷题平台Codewars初体验-Java

下一篇:Codewars-Java编程刷题学习3-Bit Counting

微信公众号,欢迎关注,一起学习。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值