閾捐〃澶ф暣鏁拌繘鍒惰浆鎹細浠绘剰杩涘埗鏁扮殑瀛樺偍涓庤绠?/h1>

涓€銆侀棶棰樿儗鏅?/h2>

褰撴暟瀛楄秴鍑虹紪绋嬭瑷€鍘熺敓鏁存暟鑼冨洿鏃讹紝闇€瑕佺敤閾捐〃鎴栨暟缁?/strong>鏉ヨ〃绀恒€傛湰鏂囨帰璁ㄥ浣曞皢閾捐〃琛ㄧず鐨勫崄杩涘埗澶ф暣鏁拌浆鎹负浠绘剰杩涘埗銆?/p>

// 閾捐〃琛ㄧず鏁板瓧123: 1 -> 2 -> 3
// 杞簩杩涘埗: 1 -> 1 -> 1 -> 1 -> 0 -> 1 -> 1 (鍗?111011)
// 杞叓杩涘埗: 1 -> 7 -> 3 (鍗?73)
// 杞崄鍏繘鍒? 7 -> B (鍗?B)

浜屻€佺畻娉曟€濊矾

  1. 閾捐〃杞暟鍊?/strong>锛氶亶鍘嗛摼琛ㄨ绠楀崄杩涘埗鍊?/li>
  2. 杩涘埗杞崲锛氬弽澶嶉櫎浠ョ洰鏍囪繘鍒讹紝鍙栦綑鏁?/li>
  3. 鏋勫缓缁撴灉閾捐〃锛氫綑鏁伴€嗗簭缁勬垚鏂伴摼琛?/li>

涓夈€佷唬鐮佸疄鐜?/h2>
class ListNode {
    val: number | string;
    next: ListNode | null = null;
    constructor(val: number | string) { this.val = val; }
}

function convertBase(head: ListNode | null, base: number): ListNode | null {
    if (!head) return new ListNode(0);
    
    // 姝ラ1锛氶摼琛ㄨ浆鍗佽繘鍒舵暟鍊?
    let decimal = 0n; // 浣跨敤BigInt鏀寔澶ф暟
    let current = head;
    while (current) {
        decimal = decimal * 10n + BigInt(current.val as number);
        current = current.next;
    }
    
    // 鐗规畩鎯呭喌锛氭暟鍊间负0
    if (decimal === 0n) return new ListNode(0);
    
    // 姝ラ2锛氳浆鎹负鐩爣杩涘埗
    const digits: string[] = [];
    const baseN = BigInt(base);
    const hexChars = '0123456789ABCDEF';
    
    while (decimal > 0n) {
        const remainder = Number(decimal % baseN);
        digits.push(hexChars[remainder]);
        decimal = decimal / baseN;
    }
    
    // 姝ラ3锛氭瀯寤虹粨鏋滈摼琛紙閫嗗簭锛?
    const dummy = new ListNode(0);
    let tail = dummy;
    
    for (let i = digits.length - 1; i >= 0; i--) {
        tail.next = new ListNode(digits[i]);
        tail = tail.next;
    }
    
    return dummy.next;
}
馃挕 澶ф暟澶勭悊锛?/strong>浣跨敤BigInt閬垮厤鏁存暟婧㈠嚭銆傚浜庤秴澶ф暟锛岄渶瑕佸湪閾捐〃灞傞潰鐩存帴瀹炵幇闄ゆ硶杩愮畻銆?

鍥涖€侀摼琛ㄥ眰闈㈢殑闄ゆ硶锛堣繘闃讹級

褰撴暟瀛楁瀬澶ф棤娉曠敤BigInt鏃讹紝闇€瑕佹ā鎷熸墜宸ラ櫎娉曪細

// 妯℃嫙 123 梅 2 鐨勮繃绋?
1 梅 2 = 0 浣?1 鈫?璁板綍鍟?锛岃繘浣?
12 梅 2 = 6 浣?0 鈫?璁板綍鍟?
3 梅 2 = 1 浣?1 鈫?璁板綍鍟?锛屼綑鏁?

鍟? 0 -> 6 -> 1 鍗?1锛屼綑鏁?

浜斻€佸鏉傚害鍒嗘瀽

  • 鏃堕棿锛歄(n 脳 logbaseN)锛宯涓洪摼琛ㄩ暱搴?/li>
  • 绌洪棿锛歄(logbaseN)锛岀粨鏋滈摼琛ㄩ暱搴?/li>

鍏€佸簲鐢ㄥ満鏅?/h2>
  • 瀵嗙爜瀛?/strong>锛歊SA绛夌畻娉曚腑鐨勫ぇ鏁拌繍绠?/li>
  • 閲戣瀺绯荤粺锛氶珮绮惧害璐у竵璁$畻
  • 绉戝璁$畻锛氫换鎰忕簿搴︽暟鍊艰〃绀?/li>
閾捐〃 杩涘埗杞崲 澶ф暣鏁?/span> 楂樼簿搴﹁绠?/span>