|
|
本帖最后由 peter1166 于 2014-10-16 14:41 编辑
〇〇 发表于 2014-10-16 12:12 ![]()
不可假设每个部分10万以下,
否则如果题目的数据是X,0,0,0,0,0,0的形式(0可以变成1、2、5),X就有15位
这样就秒杀了。
WITH T0 AS (
SELECT LEVEL L
,SUBSTR(S,LEVEL,1) C
FROM (SELECT '21218453415461109221' S FROM DUAL )
CONNECT BY LEVEL <= LENGTH(S)
)
,T1 AS (
SELECT REPLACE(SYS_CONNECT_BY_PATH(C,','),',','') N
FROM T0
CONNECT BY LEVEL <= 20 AND L = PRIOR L+1
)
,T AS (
SELECT DISTINCT N
FROM (SELECT N , FLOOR(N/2) SHR1 FROM T1)
WHERE N + SHR1 - 2 * BITAND(N,SHR1) IN (SELECT POWER(2,LEVEL)-1 FROM DUAL CONNECT BY LEVEL <= 16)
)
SELECT *
FROM T T1,T T2,T T3,T T4,T T5,T T6
WHERE t1.n like '2%'
and T1.N||T2.N||T3.N||T4.N||T5.N||T6.N = '21218453415461109221'
AND ROWNUM <= 1 ;
|
|