Le puzzle est d'obtenir le nombre minimum d'étapes qu'il faut pour faire un numéro 1. Les opérations autorisées sontétapes minimum à une logique échoue pour certaines conditions
1. You can subtract 1 from the number
2. You can divide the number by 2 if it is divisible by 2.
3. You can divide the number by 3 if it is divisible by 3.
A la fin, vous devez faire le nombre 1 en effectuant les opérations ci-dessus. J'essaie d'obtenir une solution qui me donne le nombre minimum d'opérations ci-dessus nécessaires pour faire le numéro 1. Mon code (en Java) est le suivant.
public int minStepsBottomUp(int n) {
int[] memoArray = new int[n+1];
memoArray[0] = 0;
memoArray[1] = 0;
for(int i=2;i<=n;++i){
int r = 1 + memoArray[i-1];
if(n % 2 == 0) {
r = Math.min(r, 1+memoArray[n/2]);
}
if(n % 3 == 0) {
r = Math.min(r, 1+memoArray[n/3]);
}
memoArray[i] = r;
}
return memoArray[n];
}
Mais je reçois une results.Example ambiguë - si le nombre est de 5, je reçois le nombre d'étapes nécessaires minimun que 4. En fait, il devrait être 3. Quelqu'un peut-il expliquer s'il vous plaît où je suis allé mal?
ce qui se passe si elle est divisible par 2 et 3, par exemple, 6? Ces opérations sont-elles dans l'ordre de préséance? – KevinO
Vous devez prendre un stylo et du papier, le faire manuellement et comparer vos étapes manuelles avec votre algorithme. – assylias
comment est le résultat de 3? – robin