zoukankan      html  css  js  c++  java
  • Stepping Number

    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 }
  • 相关阅读:
    获取非行间样式
    获取非行间样式
    prompt 方法显示输入对话框
    comfirm 方法显示对话框
    移动端页面常见问题及解决方案
    原生js怎样获取后台端口数据
    canvas描绘渐变的矩形
    cookie 的增加,销毁,读取
    canvas 绘制图形
    数组的排序,去重复
  • 原文地址:https://www.cnblogs.com/superbo/p/4112121.html
Copyright © 2011-2022 走看看