邓心一 6 年 前
コミット
7cc764dbf4
2 ファイル変更77 行追加4 行削除
  1. 68 4
      hard/65.go
  2. 9 0
      hard/68.go

+ 68 - 4
hard/65.go

@@ -1,9 +1,73 @@
 package main
 
 func isNumber(s string) bool {
-	return false
+	// Indices of number begin, dot, exp, number end (not included)
+	begIdx, dotIdx, expIdx, endIdx := -1, -1, -1, -1
+	// Has significant digit, has exp digit, last one is digit
+	sigDigit, expDigit, lDigit := false, true, false
+	for i := range s {
+		switch s[i] {
+		case ' ':
+			if begIdx != -1 {
+				endIdx = i
+			}
+			lDigit = false
+		case '+', '-':
+			if begIdx == -1 {
+				begIdx = i
+			} else if i != expIdx+1 { // If not at begin and not after exp
+				return false
+			}
+		case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
+			if !lDigit { // Is the first digit
+				if endIdx != -1 { // Appears after end
+					return false
+				}
+				if begIdx == -1 {
+					begIdx = i
+				}
+				lDigit = true
+				if expIdx == -1 { // Update sig digit & exp digit
+					sigDigit = true
+				} else {
+					expDigit = true
+				}
+			}
+		case '.':
+			// If: has two dots || appears after exp || appears after end
+			if dotIdx != -1 || expIdx != -1 || (!lDigit && endIdx != -1) {
+				return false
+			}
+			if begIdx == -1 {
+				begIdx = i
+			}
+			dotIdx = i
+		case 'e':
+			// If: has two exp || no digit at left side || appears after end
+			if expIdx != -1 || !lDigit || endIdx != -1 {
+				return false
+			}
+			expIdx = i
+			lDigit = false
+			expDigit = false // Needs exp digit
+		default:
+			return false
+		}
+	}
+	return sigDigit && expDigit
 }
 
-func main() {
-	println(isNumber(""))
-}
+// func main() {
+// 	println(isNumber("   23 "))
+// 	println(isNumber("6e-1"))
+// 	println(isNumber("-53.5e+93"))
+// 	println(isNumber(". 1"))
+// 	println(isNumber("0e-"))
+// 	println(isNumber("e-5"))
+// 	println(isNumber(""))
+// 	println(isNumber("1 a"))
+// 	println(isNumber("--1"))
+// 	println(isNumber("1. 31"))
+// 	println(isNumber(".e-4"))
+// 	println(isNumber("-."))
+// }

+ 9 - 0
hard/68.go

@@ -0,0 +1,9 @@
+package main
+
+func fullJustify(words []string, maxWidth int) (ans []string) {
+	return
+}
+
+func main() {
+
+}