码迷,mamicode.com
首页 > 其他好文 > 详细

Stepping Number

时间:2014-11-21 10:20:13      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   strong   on   

Problem

A number is called as a stepping number if the adjacent digits are having a difference of 1. For eg. 8,343,545 are stepping numbers. While 890, 098 are not. The difference between a ‘9’ and ‘0’ should not be considered as1. Given start number(s) and an end number (e) your function should list out all the stepping numbers in the range including both the numbers s & e.

Solution

注意一下边界 0 和 9 就好

 1 public static List<Integer> stepNumber(int s, int e) {
 2     List<Integer> res = new ArrayList<Integer>();
 3     if(s > e) return res;
 4     
 5     int lens = (int) Math.floor(Math.log10(s) + 1);
 6     int lene = (int) Math.floor(Math.log10(e) + 1);
 7     
 8     for(int i=lens; i<=lene; i++) {    //number in the length range of s & e
 9         for(int j=1; j<10; j++) {    //start head from 1 to 9
10             stepNumberHelper(res, s, e, i, j);
11         }
12     }
13     
14     return res;
15 }
16 
17 public static void stepNumberHelper(List<Integer> res, int s, int e, int length, int num) {
18     if(length-1 == 0) {
19         if(num >= s && num <= e) {
20             res.add(num);
21         }
22         return;
23     }
24     
25     int lastDigit = num % 10;
26     if(lastDigit == 0) {
27         stepNumberHelper(res, s, e, length-1, num*10+1);
28     }
29     else if(lastDigit == 9) {
30         stepNumberHelper(res, s, e, length-1, num*10+8);
31     }
32     else {
33         stepNumberHelper(res, s, e, length-1, num*10+lastDigit+1);
34         stepNumberHelper(res, s, e, length-1, num*10+lastDigit-1);
35     }
36 }

 

Stepping Number

标签:style   blog   io   ar   color   sp   for   strong   on   

原文地址:http://www.cnblogs.com/superbo/p/4112121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!