How do you plan to solve it?
 
 
/*Paste your code here*/
const int led1 = 5;
const int led2 = 4;
const int led3 = 3;
const int led4 = 2;
const int PB = 7;    
const int delayTime = 500;
const int totalPatterns = 5;
int currentPattern = 0;
int buttonPressed = 0;
int lastReading = HIGH;
int debouncedState = HIGH;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50;
bool checkButton() {
  int reading = digitalRead(PB);
  if (reading != lastReading) {
    
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != debouncedState) {
      debouncedState = reading;
      if (debouncedState == LOW) { 
        buttonPressed = 1;
        lastReading = reading;
        return true;
      }
    }
  }
  lastReading = reading;
  return false;
}
bool delayWithButtonCheck(unsigned long ms) {
  unsigned long start = millis();
  while (millis() - start < ms) {
    if (checkButton()) return true;
    delay(8); 
  }
  return false;
}
void pattern1() {
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
}
void pattern2() {
  digitalWrite(led1, HIGH);
  digitalWrite(led2, LOW);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, LOW);
  digitalWrite(led4, HIGH);
  if (delayWithButtonCheck(delayTime)) return;
}
void pattern3() {
  digitalWrite(led1, HIGH);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, HIGH);
  if (delayWithButtonCheck(delayTime)) return;
}
void pattern4() {
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  if (delayWithButtonCheck(delayTime)) return;
}
void pattern5() {
  digitalWrite(led1, HIGH);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, HIGH);
  if (delayWithButtonCheck(delayTime)) return;
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, LOW);
  if (delayWithButtonCheck(delayTime)) return;
}
typedef void (*func_ptr)();
func_ptr pattern[totalPatterns] = {pattern1, pattern2, pattern3, pattern4, pattern5};
void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(PB, INPUT_PULLUP);
}
void loop() {
  checkButton();
  if (buttonPressed) {
    currentPattern = (currentPattern + 1) % totalPatterns;
    buttonPressed = 0;
  }
  pattern[currentPattern]();
}
Add a video of the output (know more)
