|
长度最大为10,很慢,7,8 都一样了,后来想想数字组合 12 肯定不在答案中,因为 1*2 < 1+2 ,所以长度
取得8就够了,而且0只可能在最后一位,姑且假设它在答案中,所以:
SQL>
SQL> with t as (select level-1 n from dual connect by level <=10),
2 s(n,str) as (select 1,cast( n as varchar2(10)) from t
3 union all
4 select s.n+1,
5 s.str||t.n
6 from s,t
7 where s.n < 8
8 and instr(s.str,'0') = 0
9 and instr(s.str,t.n) = 0 )
10 select max(str)
11 from (
12 select n,str,
13 sum(case when substr(four,2,1)*substr(four,3,1)
14 > substr(four,1,1)+substr(four,2,1)+substr(four,3,1)+substr(four,4,1)
15 then 1
16 else 0
17 end) sum_val,
18 count(*) cnt
19 from (
20 select n,str,substr(str,p.m,4) four
21 from (select *
22 from s
23 where n>=4
24 and substr(str,2,1)*substr(str,3,1) > substr(str,1,1)+substr(str,2,1)+substr(str,3,1)+substr(str,4,1)
25 ) s1,
26 (select level m from dual connect by level <= 7) p
27 where n >= 4
28 and p.m + 3 <= s1.n )
29 group by n,str
30 )
31 where sum_val = cnt
32 /
MAX(STR)
--------------------------------------------------------------------------------
9876543
|
|