NextStrNum

  1. public class NextStrNum {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.         String strNum = "11457584571";   
  6.         System.out.println("0\t    strNum=" + strNum);   
  7.   
  8.         int i = 1;   
  9.         try {   
  10.             for (; i <= 1000; i++) {   
  11.                 strNum = nextStrNum(strNum);   
  12.                 System.out.println(i + "\tstrNumNext=" + strNum);   
  13.             }   
  14.         } catch (Exception e) {   
  15.             System.out.println("==============================");   
  16.             System.out.println(i + "\t strNumMax=" + e.getMessage());   
  17.         }   
  18.     }   
  19.   
  20.     private static String nextStrNum(String strNum) throws Exception {   
  21.   
  22.         if(strNum.length() <= 1) {   
  23.             throw new Exception(strNum);   
  24.         }   
  25.   
  26.         int strNumLen = strNum.length();   
  27.         String strhead = "";   
  28.         char charmiddle = ' ';   
  29.         String strtail = "";   
  30.   
  31.         for (int i = strNumLen - 1; i >= 1; i--) {   
  32.   
  33.             if(strNum.charAt(i) > strNum.charAt(i - 1)) {   
  34.   
  35.                 strhead = strNum.substring(0, i-1);   
  36.                 charmiddle = strNum.charAt(i - 1);   
  37.                 strtail = strNum.substring(i);   
  38.                 break;   
  39.             }   
  40.         }   
  41.   
  42. //      System.out.println("strhead=" + strhead);   
  43. //      System.out.println("strmiddle=" + charmiddle);   
  44. //      System.out.println("strtail=" + strtail);   
  45.   
  46.         int strtailLen = strtail.length();   
  47.         if(strtailLen == 0) {   
  48.             throw new Exception(strNum);   
  49.         }   
  50.   
  51.         char tmp = charmiddle;   
  52.   
  53.         if(strtailLen == 1) {   
  54.             charmiddle = strtail.charAt(0);   
  55.             strtail = String.valueOf(tmp);   
  56.         } else {   
  57.             strtail = new StringBuilder(strtail).reverse().toString();   
  58.   
  59.             for (int i = 0; i < strtailLen; i++) {   
  60.                 if(strtail.charAt(i) > charmiddle) {   
  61.                     charmiddle = strtail.charAt(i);   
  62.                     strtail = strtail.substring(0, i) + String.valueOf(tmp) + strtail.substring(i + 1);   
  63.                     break;   
  64.                 }   
  65.             }   
  66.         }   
  67.   
  68. //      System.out.println("strhead=" + strhead);   
  69. //      System.out.println("strmiddle=" + String.valueOf(charmiddle));   
  70. //      System.out.println("strtail=" + strtail);   
  71.   
  72.         return strhead + String.valueOf(charmiddle) + strtail;   
  73.     }   
  74.   
  75. }   
  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓