Java > Recursion-1 > count8 (CodingBat Solution)

Problem:

Given a non-negative int n, compute recursively (no loops) the count of the occurrences of 8 as a digit, except that an 8 with another 8 immediately to its left counts double, so 8818 yields 4. Note that mod (%) by 10 yields the rightmost digit (126 % 10 is 6), while divide (/) by 10 removes the rightmost digit (126 / 10 is 12).

count8(8) → 1
count8(818) → 2
count8(8818) → 4


Solution:

public int count8(int n) {
  if (n < 1) return 0;
  if (n % 10 == 8 && (n / 10) % 10 == 8) return 2 + count8(n/10);
  else if (n % 10 == 8) return 1 + count8(n/10);
  else return count8(n/10);
}

8 comments:

  1. public int count8(int n) {
    if(n == 0) return 0;
    if(n % 10 == 8 && n % 100 == 88) return 2 + count8(n / 10);
    if(n % 10 == 8) return 1 + count8(n / 10);
    return count8(n / 10);
    }

    ReplyDelete
    Replies
    1. n % 10 == 8 && n % 100 == 88
      can be simplified to just
      n % 100 == 88
      because if the 2nd statement is true, the first one is always true too.

      Delete
  2. public int count8(int n) {
    if (n < 10) return n == 8 ? 1 : 0;

    if (n % 10 == 8 && (n / 10) % 10 == 8) return 2 + count8(n / 10);

    return count8(n % 10) + count8(n / 10);
    }

    ReplyDelete
  3. public int count8(int n) {
    if(n == 0) return 0;
    if(n % 100 == 88) return 2 + count8(n/10);
    if(n % 10 == 8) return 1 + count8(n/10);
    return count8(n/10);
    }

    ReplyDelete
  4. public int count8(int n) {
    int count = 0;
    if(n == 0) return 0;
    if(n%10 == 8) {
    if((n/10)%10 == 8){
    count++;
    }
    count++;
    }
    count += count8(n/10);
    return count;
    }

    ReplyDelete
  5. public int count8(int n) {
    int count = 0;
    if (n > 1) {
    if (n>10) {
    int newN = n/10;
    if (n%10 == 8 && (newN%10) == 8) {
    count += 2;
    return count + count8(n/10);
    }
    }
    if (n%10 == 8) {
    count++;
    return count + count8(n/10);
    }
    else {
    return count + count8(n/10);
    }
    }
    return count;
    }

    ReplyDelete
  6. if(n<1) return 0;
    if(n%100==88) return 2+count8(n/10);
    if(n%10==8) return 1+count8(n/10);
    else return count8(n/10);

    ReplyDelete