470. Implement Rand10() Using Rand7()

(rand_x() - 1) * y + rand_y()可以生成数学 math - 图1区间的随机数。

  1. # def rand7():
  2. # @return a random integer in the range 1 to 7
  3. class Solution:
  4. def rand10(self):
  5. while True:
  6. a, b = rand7(), rand7()
  7. num = (a - 1) * 7 + b # rand_49()
  8. if num <= 40:
  9. return num % 10 + 1 # 舍弃'41~49'
  10. a = num - 40 # rand_9()
  11. b = rand7()
  12. num = (a - 1) * 7 + b # rand_63()
  13. if num <= 60:
  14. return num % 10 + 1 # 舍弃'61~63'
  15. a = num - 60 # rand_3()
  16. b = rand7()
  17. num = (a - 1) * 7 + b # rand_21()
  18. if num <= 20:
  19. return num % 10 + 1 # 舍弃'21' => 最终只舍弃了一个数

7. Reverse Integer

很容易想到使用**栈**或者**字符串**作为桥梁进行整数反转,但空间复杂度为数学 math - 图2
题目要求只能使用32bit的整数数据,故需要提前判断。