iOS-배열 조합 알고리즘의 요약

1570 단어
최근 프로젝트에서 배열 조합 계산을 사용했는데 비교적 간단하지만 전체 학습 과정은 나중에 경험을 흡수할 수 있도록 기록해야 한다.최초의 사고방식은 계승으로 배열 조합의 문제를 해결하는 것이기 때문에 귀착을 생각했다.
long arithmetic(int n)
{
    if (n>1) {
        return n*arithmetic(n-1);
    }else if (n == 1){
        return 1;
    }else{
        return 1;
    }
}

그러나 귀속하면 폐단이 하나 있다. 숫자가 어느 정도에 이르렀을 때 값이 경계를 넘는 상황이 나타나고 롱롱 유형을 사용해도 경계를 넘는 상황이 나타난다.그래서 계승하는 이런 식으로 잠시 방치되었다.두 번째 사고방식은 for순환으로 문제를 해결하는 것이다.단지 이런 알고리즘을 배열하는 데만 쓰일 뿐, 계승은 사용하지 않으면 안 되지만, 조합으로 말하자면, 완전히 다른 방식으로 해결할 수 있다.해결의 사고방식은 디지털 값이 경계를 넘지 않도록 분자와 분모를 약분한 후에 다음 분자를 곱하고 분모와 약분할 수 있도록 하는 것이다.이렇게 유추하다.말이 많지 않으니 바로 코드를 눌러라.
/**
    
 */
- (long)lotterySSQPTRecursiveWithRedBalls:(NSUInteger)redBalls blueBalls:(NSUInteger)blueBalls{
    if (redBalls > 5 && blueBalls > 0) {
        if (redBalls == 6) {
            return blueBalls;
        }else{
            NSUInteger count = (redBalls-6 > 6) ? 6 : redBalls-6;
            long number = 1;
            long molecular = 1;
            long denominator = 1;
            for (int i = 0; i < count; i++) {
                molecular = molecular*(redBalls-i);
                denominator = denominator * (i+1);
                number = (molecular*number)/denominator;
                molecular = 1;
                denominator = 1;
            }
            number = number*blueBalls;
            
            return number;
        }
    }else{
        return 0;
    }
}

직접 곱하기보다 개인적으로는 for순환이 낫다고 생각합니다.만약 더 좋은 해결 방향이 있다면, 여러분의 메시지를 환영합니다!데모를 보려는 파트너, 여기를 클릭하여 전송

좋은 웹페이지 즐겨찾기