一直对这种题比较没把握. 没有思路.
i
1,000,000.22
34,333.999
define valid(String s,boolean last,boolean first)
1.先s.trim();
if string==null or string.length==0 return false;
2.String[] t = s.spite(‘,‘);
得到几组数.
if(t.length()==1) valid(t[0],t,t)
else for()
关于splite 函数 1,, 最后 s.length = 1 . 只有1留下了.
需要考虑,, 情况!
最关键的是把所有情况先 写下来。按照图上的划分。考官也会十分清晰.
import java.util.ArrayList; import java.util.List; public class test { /** * @param args */ public static Boolean isNum(String s){ if(s == null || s.length()==0) return false; s = s.trim(); //check the ,, situation String[] t = s.split(","); int comcount = 0; for(int i=0;i<t.length;i++){ if(s.charAt(i)==‘,‘) comcount++; } if(t.length!=comcount+1) return false; if(t.length==1) return Valid(t[0], true, true); else { for(int i=0; i< t.length;i++){ if(i==0){ if(!Valid(t[i], true, true)) return false; } else if(i==(t.length-1)){ if(!Valid(t[i],false,true)) return false; }else{ if(!Valid(t[i],false,false)) return false; } } } return true; } // //effective fractional 100.222222 // public static boolean Valid2(String s){ // if(s.length() == 0) // return false; // } // public static Boolean Valid(String s, boolean f, boolean l){ if(f){ //+10234 -00234 if(s.length()>0 && (s.charAt(0)==‘-‘ || s.charAt(0)==‘+‘)) s = s.substring(1); char[] arr = s.toCharArray(); if(arr.length==0) return false; int indexDot = s.indexOf("."); if(indexDot ==-1){ //23 333 if(s.length()>3) return false; }else{ if(indexDot>3) return false; for(int i=0;i<indexDot;i++){ if(!check(s.charAt(i))) return false; } if(indexDot==s.length()-1) return false; for(int i=indexDot+1;i<s.length();i++){ if(!check(s.charAt(i))) return false; } } return true; } if(l){ if(s.length()<3) return false; for(int i=0;i<3;i++) { if(!check(s.charAt(i))) return false; } if(s.length()>3){ if(s.charAt(3)!=‘.‘) return false; for(int i=4;i<s.length();i++){ if(!check(s.charAt(i))) return false; } } return true; } // middle if(s.length()!=3) return false; char[] arr = s.toCharArray(); for(int i=0;i<arr.length;i++){ if(!check(arr[i])) return false; } return true; } static boolean check(char c){ return (‘0‘ <= c && c <= ‘9‘); } public static void main(String[] args) { String[]t = {",,","100,002",",000.3", "+34444","9999.234324","234234", "+56.234234","1,000,000,030.21231","-0.3242", ".+99","1111.6",",999.3" ,"+1,000,987.23444444444" }; for(String c:t) System.out.println(isNum(c)); } }
原文:http://www.cnblogs.com/leetcode/p/4004705.html