Il semble que des tests de codage soient menés à l'étranger lors d'entretiens d'ingénieurs, et dans de nombreux cas, l'essentiel est d'implémenter des fonctions et des classes spécifiques en fonction du thème.
Apparemment, de nombreux ingénieurs prennent des mesures sur le site appelé LetCode.
C'est un site qui forme la puissance de l'algorithme qui peut résister au test de codage effectué au début, et c'est un chemin inévitable pour ceux qui veulent faire carrière dans une entreprise de technologie à l'étranger.
Je l'ai écrit en grand, mais je n'ai pas l'intention d'avoir une telle interview pour le moment.
Cependant, en tant qu'ingénieur informatique, il serait préférable d'avoir le même niveau de puissance d'algorithme qu'une personne, alors j'aimerais résoudre le problème de manière irrégulière et écrire la méthode que je pensais à l'époque sous forme de mémo.
Je le résolve avec Python3.
Table de codes Leet commençant à zéro
Dernière fois Leet Code Day73 commençant à zéro "1491. Salaire moyen hors salaire minimum et maximum"
À l'heure actuelle, je donne la priorité au moyen des 100 questions les plus appréciées. Easy a été résolu, donc si vous êtes intéressé, veuillez vous rendre à la table.
Twitter Je le fais.
** Blog technique Commencé! !! ** ** Je pense que la technologie écrira sur LetCode, Django, Nuxt, etc. ** C'est plus rapide à mettre à jour **, merci pour votre coopération!
12. Integer to Roman Le niveau de difficulté est moyen.
J'avais un mauvais pressentiment car il y a plus de Bads ...
Les nombres romains sont représentés par sept symboles différents. Il est représenté par sept symboles différents: I, V, X, L, C, D et M. Dans ce problème, il est converti comme suit.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Par exemple, 2 s'écrit II en chiffres romains, mais ce n'est que l'addition de deux 1. 12 s'écrit XII, mais ce n'est que X + II. Le nombre vingt-sept s'écrit XXVII, qui est XX + V + II.
Les nombres romains sont généralement écrits de gauche à droite, du plus grand au plus petit. Mais le chiffre 4 n'est pas IIII. Au lieu de cela, le nombre 4 s'écrit IV. 1 est devant 5, alors soustrayez-le pour obtenir 4. Le nombre 9 s'écrit IX sur le même principe. Il existe six exemples d'utilisation de la soustraction.
Si I est placé avant V (5) et X (10), il devient 4 et 9. Si X précède L (50) et C (100), il devient 40 et 90. Mettre C devant D (500) et M (1000) donne 400 et 900.
Le problème est de concevoir un algorithme qui convertit en nombres romains selon les règles ci-dessus lorsqu'un entier est donné.
Il est confirmé que l'entrée est comprise entre 1 et 3999.
Example 1: Input: 3 Output: "III"
Example 2: Input: 4 Output: "IV"
Example 3: Input: 9 Output: "IX"
Example 4: Input: 58 Output: "LVIII" Explanation: L = 50, V = 5, III = 3.
Example 5: Input: 1994 Output: "MCMXCIV" Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
class Solution:
def intToRoman(self, num: int) -> str:
nums = (1000,900,500,400,100,90,50,40,10,9,5,4,1)
roman = ("M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I")
ans = ""
while num != 0:
for i, j in enumerate(nums):
if num >= j:
num -= j
ans += roman[i]
break
return ans
# Runtime: 52 ms, faster than 60.03% of Python3 online submissions for Integer to Roman.
# Memory Usage: 13.9 MB, less than 33.48% of Python3 online submissions for Integer to Roman.
Tenez chaque valeur entre «nums» et «roman», faites pivoter l'instruction for jusqu'à ce qu'elle devienne 0, diminuez de j uniquement lorsque la valeur est j ou plus, et ajoutez l'index de roman à «an». ,.
Puisque les valeurs de «nums» et «roman» correspondent, l'index peut être utilisé tel quel. Quand j'y pense maintenant, je ne pense pas qu'il soit plus rafraîchissant d'utiliser un dictionnaire.
De plus, certaines discussions répondent comme suit par force brute.
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
result = []
if num>=1000:
times = num/1000
result.append(times*'M')
num = num%1000
if num>=900:
result.append('CM')
num -=900
if num>=500 and num<900:
result.append('D')
num -= 500
if num>=400 and num<500:
result.append('CD')
num-=400
if num >=100 and num<400:
times = num/100
result.append(times *'C')
num = num%100
if num >=90 and num<100:
result.append('XC')
num-=90
if num >=50 and num<90:
result.append('L')
num-=50
if num>=40 and num<50:
result.append('XL')
num-=40
if num>=10 and num<40:
times = num/10
result.append(times*'X')
num %= 10
if num==9:
result.append('IX')
num-=9
if num>=5 and num<9:
result.append('V')
num-=5
if num==4:
result.append('IV')
num-=4
if num>=1 and num<=3:
result.append(num*'I')
num-=num
return ''.join(result)
# Runtime: 20 ms, faster than 99.65% of Python online submissions for Integer to Roman.
# Memory Usage: 12.7 MB, less than 65.50% of Python online submissions for Integer to Roman.
https://leetcode.com/problems/integer-to-roman/discuss/715614/Clean-easy-and-fast-Python-Solution
Soumis en Python au lieu de Python3.
Après l'avoir résolu, j'ai l'impression d'avoir en quelque sorte compris la raison pour laquelle il y a tant de mauvais ...
Alors c'est tout pour cette fois. Je vous remercie pour votre travail acharné.
Recommended Posts