下午刚接触Codewars ,点击这里打开codewar ,进去之后先做对两道题才能继续,注册之后可以选择自己擅长的语言和自己的等级,做题的范围等,接下来就可以做题了,会根据题目的难度和你做的情况升级。而且界面很酷炫,可以更改设置,编程之后可以runtest ,测试程序的简单功能性,通过之后submit 系统会给出更多的测试范例和结果,还有运行时间,非常好用。
下午做了两道题,其中一题挑战逻辑,经过一个多小时艰苦备战,终于测试通过,但看看自己代码,用了70多行,写了好几个函数,再去看排名较高的,20行左右搞定,除了第一名的思路新颖,和后面的思路基本一样,但是枉费了很多JavaScript的函数,自己傻乎乎的去实现。一言不合,上题目和代码:
You have to create a function that takes a positive integer number and returns the next bigger number formed by the same digits(返回一个用相同数字组成的比这个正数第一大的数字,如果不存在则返回 -1): 比如nextBigger(12)==21
nextBigger(513)==531
nextBigger(2017)==2071
nextBigger(2072) == 2207
nextBigger(9)==-1
nextBigger(111)==-1
nextBigger(531)==-1
分析了几个例子,我的思路就是,先把数字转为数组,然后从后往前遍历,每次后一个数字和前一个数字比较,当遇到
第一后面数字比前面数字大的时候,对该数字及以后的数字进行从小到大排序,然后用该数字前面一个数字和排序后
的数组进行比较,直到遇到第一个比这个小数字大的数字,然后交换两者,再将交换之后的数组转换成数字。
过程和例子见下图:
根据这个思路的完整代码:
codewars