var g [4]int var nums [4]int var minDIffMinute int func nextTime(s string) string { minDIffMinute = 24*60 strs := strings.Split(s, ":") hour, _ := strconv.Atoi(strs[0]) minute, _ := strconv.Atoi(strs[1]) minute = hour*60+minute nums = [4]int{int(strs[0][0])-'0&(30533)#39;, int(strs[0][1])-'0&(30533)#39;, int(strs[1][0])-'0&(30533)#39;, int(strs[1][1])-'0&(30533)#39;} dfs(0, 4, minute) resMinute:=minute+minDIffMinute if resMinute > 24*60{ resMinute -= 24*60 } hour, minute = resMinute/60,resMinute%60 return strconv.Itoa(hour)+":"+strconv.Itoa(minute) } func dfs(start int, n int, minute int) { if n == start { if g[0] >2 || g[1] > 4 || g[2] > 5 || g[1] > 9{ return } curMinute := 60*(10*g[0]+g[1])+10*g[2]+g[3] if curMinute < minute{ curMinute+=24*60 } if curMinute==minute{ return } if minDIffMinute> curMinute-minute { minDIffMinute = curMinute-minute } return } for i:=0;i<4;i++{ g[start] = nums[i] dfs(start+1, n, minute) } } // 12:21