|
用SQL证明奥数哥的答案已是最大的:
WITH t(str,occur,intv,c,lvl) AS (
SELECT '9' str
,'0000000001' as occur ---- 每个数字出现次数
,'0000000000000000000' intv ---- 哪些间隔已被用过
,9 c
,1 FROM DUAL
UNION ALL
SELECT str||rn
,SUBSTR(occur,1,rn)||(CASE WHEN rn=c-1 THEN '1' ELSE '2' END)||SUBSTR(occur,rn+2)
,CASE WHEN rn=c-1 THEN intv
ELSE SUBSTR(intv,1,LENGTH(str)-INSTR(str,rn))||'1'||SUBSTR(intv,LENGTH(str)-INSTR(str,rn)+2)
END
,LEAST(c,rn)
,lvl+1
FROM t
,(SELECT ROWNUM-1 rn FROM DUAL CONNECT BY ROWNUM<=10)
WHERE str >= SUBSTR('99878675432106520134',1,LENGTH(str)) AND ---- 人肉加速器. 如果代入野花的99878675432103526401,结果相同
(rn=c-1
OR (rn>=c
AND SUBSTR(occur,rn+1,1)='1'
AND SUBSTR(intv,LENGTH(str)-INSTR(str,rn)+1,1)='0'
)
)
)
SELECT MAX(str)
FROM t
WHERE INSTR(occur,'1')=0;
MAX(STR)
-----------------------------------------
99878675432106520134
Elapsed: 00:00:00.03 |
|