"Concrete Mathematics: A Foundation for Computer Science" by Knuth, Graham, and Patashnik - solid foundation in mathematical concepts and techniques, and it helped me develop a deeper understanding of mathematical notation and problem-solving.
"Introduction to the Theory of Computation" by Michael Sipser - introduced me to the theoretical foundations of computer science, and it helped me develop a strong understanding of formal languages, automata, and complexity theory.
"A Course in Combinatorics" by J.H. van Lint and Wilson - provided a comprehensive introduction to combinatorics, and it helped me develop a strong understanding of combinatorial techniques and their applications.
"The Art of Problem Solving" by Richard Rusczyk - This book is a comprehensive guide to problem-solving, with a focus on mathematical problem-solving strategies. It helped me develop my problem-solving skills and learn how to think critically about mathematical problems.