How to Print the Next N Leap Years in Java
The Leap year is an interval of four years. The consecutive years maintain consistency as a leap year is crucial for reliable calendar functionality. Leap year is divisible by 4, but not divisible by 100 unless also divisible by 400.
Example 1
Input: Year = 2024, N = 5
Output: 2024
2028
2032
2036
2040
Example 2
Input: Year = 2021, N = 6
Output: 2024
2028
2032
2036
2040
2044
Example 3
Input: Year = 2022, N = 2
Output: 2024
2028
Approach 1: Using Iteration Approach
The iterative approach is simple and efficient. This approach iteratively checks each year from the starting year. This approach is to generate the next N leap years starting from a given year.
Algorithm
Step 1: Initialize the starting year and the number of leap years to print.
Step 2: Initialize a counter to keep track of leap years printed.
Step 3: Iterate through the years starting from the given starting year.
Step 4: For each year, check if it is a leap year using the isLeapYear() method.
Step 5: If it is a leap year, print the year and increment the leap year count.
Step 6: Repeat the steps until the desired number of leap years is printed.
Filename: NextLeapYearsUisngIteration.java
import java.util.*;
public class NextLeapYearsUisngIteration {
public static void main(String[] args) {
// Initialize starting year and number of leap years to print
int startYear = 2021;
int n = 6;
// Initialize counter for leap years printed
int count = 0;
// Iterate through years starting from the given year
for (int year = startYear; count < n; year++) {
// Check if the current year is a leap year
if (isLeapYear(year)) {
// Print the leap year
System.out.println(year);
// Increment leap year count
count++;
}
}
}
// Method to check if a year is a leap year
public static boolean isLeapYear(int year) {
// Leap year condition: divisible by 4 and not divisible by 100 unless also divisible by 400
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
Output
2024
2028
2032
2036
2040
2044
Time Complexity: The time complexity of an algorithm is O(n), where n is the number of leap years. This is because the algorithm iterates through a fixed number of years (N) to find the next N leap years.
Space Complexity: The space complexity of an algorithm is O(1). This is because the algorithm uses a fixed amount of extra space for variables, independent of the input size.
Approach 2: Using Recursion
The alternative approach to generate the next N leap years is using recursion. This approach recursively checks each year and invokes the method to print the next leap year.
Algorithm
Step 1: Initialize the starting year and the number of leap years to print.
Step 2: Call the recursive function printNextNLeapYears() with the starting year and the desired count of leap years.
Step 3: If the desired count of leap years is zero or less, return.
Step 4: Check if the current year is a leap year using the isLeapYear() method.
Step 4.1: If it is a leap year, print the year and recursively call the function with the next year and decremented count.
Step 4.2: If it is not a leap year, recursively call the function with the next year and the same count.
Step 5: Repeat the steps until the desired count of leap years is printed.
Filename: NextLeapYearsUsingRecursion.java
public class NextLeapYearsUsingRecursion {
public static void main(String[] args) {
// Initialize starting year and number of leap years to print
int startYear = 2021;
int n = 6;
// Call the recursive function to print the next N leap years
printNextNLeapYears(startYear, n);
}
// Recursive method to print the next N leap years
public static void printNextNLeapYears(int year, int n) {
// Base case: stop recursion when N leap years are printed
if (n <= 0) {
return;
}
// Check if the current year is a leap year
if (isLeapYear(year)) {
// Print the leap year
System.out.println(year);
// Recursive call to print the next leap year
printNextNLeapYears(year + 1, n - 1);
} else {
// If the current year is not a leap year, check the next year
printNextNLeapYears(year + 1, n);
}
}
// Method to check if a year is a leap year
public static boolean isLeapYear(int year) {
// Leap year condition: divisible by 4 and not divisible by 100 unless also divisible by 400
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
Output
2024
2028
2032
2036
2040
2044
Time Complexity: The time complexity of an algorithm is O(n), where n is the number of leap years. This is because the algorithm may iterate through up to N years to find the next N leap years.
Space Complexity: The space complexity of an algorithm is O(n). This is because the space complexity is linear due to the recursion stack, which may grow up to N frames deep in the worst case.
Approach 3: Using ArrayList
The approach is used to print the next N leap years starting from a given year. This algorithm iteratively checks each year and adds leap years to an ArrayList until the desired count is reached. Finally, we print the leap years stored in the ArrayList.
Algorithm
Step 1: Initialize the starting year and the number of leap years to print.
Step 2: Create an ArrayList to store leap years.
Step 3: Iterate through years starting from the given year until the ArrayList size reaches N.
Step 4: For each year, check if it is a leap year using the isLeapYear() method.
Step 5: If it is a leap year, add it to the ArrayList.
Step 6: Print the leap years stored in the ArrayList.
Filename: NextLeapYearsUsingArrayList.java
import java.util.ArrayList;
public class NextLeapYearsUsingArrayList {
public static void main(String[] args) {
// Initialize starting year and number of leap years to print
int startYear = 2021;
int n = 6;
// ArrayList to store leap years
ArrayList<Integer> leapYears = new ArrayList<>();
// Iterate through years starting from the given year
int year = startYear;
while (leapYears.size() < n) {
// Check if the current year is a leap year
if (isLeapYear(year)) {
// Add leap year to the ArrayList
leapYears.add(year);
}
// Move to the next year
year++;
}
// Print the leap years
for (int leapYear : leapYears) {
System.out.println(leapYear);
}
}
// Method to check if a year is a leap year
public static boolean isLeapYear(int year) {
// Leap year condition: divisible by 4 and not divisible by 100 unless also divisible by 400
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
Output
2024
2028
2032
2036
2040
2044
Time Complexity: The time complexity of an algorithm is O(n), where n is the number of leap years. This is because the algorithm iterates through a fixed number of years (N) to find the next N leap years.
Space Complexity: The space complexity of an algorithm is O(n). This is because the space complexity is linear; we use an ArrayList to store the leap years, which may grow up to N elements in the worst case.
Approach 4: Using Java 8 Stream API
Java Streams to generate the next N leap years starting from a given year. By Stream API, we can filter and limit the stream of years to find the desired leap years efficiently.
Algorithm
Step 1: Initialize the starting year and the number of leap years to print.
Step 2: Generate a stream of years starting from the given year using IntStream.iterate().
Step 3: Apply a filter operation to keep only the leap years using the isLeapYear() method.
Step 4: Limit the stream to the next N leap years using the limit() operation.
Step 5: Box the int values to Integer objects using the boxed() operation.
Step 6: Collect the leap years into a List<Integer> using the collect(Collectors.toList()) operation.
Step 7: Print the leap years stored in the list.
Filename: NextLeapYearsUsingStreams.java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class NextLeapYearsUsingStreams {
public static void main(String[] args) {
// Initialize starting year and number of leap years to print
int startYear = 2021;
int n = 6;
// Generate a stream of years starting from the given year
List<Integer> leapYears = IntStream.iterate(startYear, year -> year + 1)
.filter(NextLeapYearsUsingStreams::isLeapYear)
.limit(n)
.boxed()
.collect(Collectors.toList());
// Print the leap years
leapYears.forEach(System.out::println);
}
// Method to check if a year is a leap year
public static boolean isLeapYear(int year) {
// Leap year condition: divisible by 4 and not divisible by 100 unless also divisible by 400
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
Output
2024
2028
2032
2036
2040
2044
Time Complexity: The time complexity of an algorithm is O(n), where n is the number of leap years. This is because the algorithm iterates through a fixed number of years (N) to find the next N leap years.
Space Complexity: The space complexity of an algorithm is O(n). This is because the space complexity is linear; we use a List to store the leap years, which may grow up to N elements in the worst case.