Par exemple, si j'ai le numéro 35565, la sortie est 3565.
Donc, mon extrait de code contient des chiffres uniques, mais je ne sais pas comment conserver le numéro précédent pour vérifier avec le numéro suivant.
for { num = num / 10 fmt.Print(num) if num/10 == 0 { break } }
Cette méthode divise le nombre en nombres de droite à gauche, les stocke sous forme de tranches entières, puis itère les nombres de gauche à droite pour construire un nombre avec des chiffres « consécutivement uniques ».
J'ai d'abord essayé de factoriser le nombre de gauche à droite, mais je ne savais pas comment gérer les zéros fictifs ; en le factorisant de droite à gauche, je savais comment capturer ces zéros.
// unique removes sequences of repeated digits from non-negative x, // returning only "sequentially unique" digits: // 12→12, 122→12, 1001→101, 35565→3565. // // Negative x yields -1. func unique(x int) int { switch { case x < 0: return -1 case x <= 10: return x } // -- Split x into its digits var ( mag int // the magnitude of x nDigits int // the number of digits in x digits []int // the digits of x ) mag = int(math.Floor(math.Log10(float64(x)))) nDigits = mag + 1 // work from right-to-left to preserve place-holding zeroes digits = make([]int, nDigits) for i := nDigits - 1; i >= 0; i-- { digits[i] = x % 10 x /= 10 } // -- Build new, "sequentially unique", x from left-to-right var prevDigit, newX int for _, digit := range digits { if digit != prevDigit { newX = newX*10 + digit } prevDigit = digit } return newX }
C'est un terrain de jeu pour tester.
Peut être adapté pour gérer les nombres négatifs en retournant le signe négatif au début et en le restaurant à la fin.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!