zoukankan      html  css  js  c++  java
  • LeetCode 2. Add Two Numbers swift

    //
    //  main.swift
    //  leetcode02
    //
    //  Created by GuoLa on 16/1/21.
    //  Copyright © 2016年 GuoLa. All rights reserved.
    //
    
    import Foundation
    
    func input() -> String {
        let keyboard = NSFileHandle.fileHandleWithStandardInput()
        let inputData = keyboard.availableData
        let strData = NSString(data: inputData, encoding: NSUTF8StringEncoding)!
        return strData.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
    }
    
    
    class ListNode{
        var val:Int
        var next:ListNode?
        init(_ num: Int)
        {
            val=num
            next=nil
        }
        
        func desc()->String{
            
            var ret:String = String(val)
            var node = next
            while node != nil {
                ret = ret.stringByAppendingFormat("->%d", (node?.val)!)
                node=node!.next
            }
            return ret
        }
    }
    
    
    public class SolutionAddTwoNumbers{
        func addTwoNumbers(l1: ListNode?,l2: ListNode?) ->ListNode{
            let ret:ListNode = ListNode(-1)
            var p1=l1
            var p2=l2
            var p:ListNode = ret
            
            if l1 == nil { ret.next = l2; return ret;}
            if l2 == nil { ret.next = l1; return ret;}
            
            var p1count = 0
            while p1 != nil {
                p1=p1?.next
                p1count++
            }
            var p2count = 0
            while p2 != nil {
                p2=p2?.next
                p2count++
            }
            
            if p2count > p1count {
                p1=l2
                p2=l1
            }else
            {
                p1=l1
                p2=l2
            }
            
            
            
            
            while p1 != nil {
    
                if p2 == nil {
                    var sum=p1!.val
                    if p.next != nil {
                        sum+=(p.next!.val);
                    }
                    p.next=ListNode(sum%10)
                    p=p.next!
                    
                    if sum/10 > 0 { p.next = ListNode(1) }
                    p1=p1?.next
                    
                }
                while p2 != nil {
                    var sum=p1!.val+p2!.val
                    if p.next != nil {
                        sum+=(p.next!.val);
                    }
                    
                    p.next=ListNode(sum%10)
                    p=p.next!
                    
                    if sum/10 > 0 { p.next = ListNode(1) }
                    
                    p1=p1!.next
                    p2=p2!.next
                    
                   }
            }
            
            return ret.next!;
        }
    }
    
    func ListNodeCreate(str: String) ->ListNode {
        let str:[String] = str.componentsSeparatedByString("->")
        var list:ListNode = ListNode(-1)
        let ret = list
        
        for s in  str {
            list.next = ListNode(Int(s)!)
            list=list.next!
        }
        
        return ret.next!
    }
    
    
    var testCaseAddTowNumber = SolutionAddTwoNumbers()
    
    var l1:String = ""
    repeat{
    
    print("Enter ListNode1:(Input exit,Program end!)")
    
    
    //var l1 = "2->3->4"
    l1 = input()
    if l1 == "exit" {break}
    
    print("Enter ListNode2:")
    //var l2 = "1->2->3"
    var l2 = input()
    
    let nodel1 = ListNodeCreate(l1)
    let nodel2 = ListNodeCreate(l2)
    
    print(nodel1.desc())
    print(nodel2.desc())
    
    var tow = SolutionAddTwoNumbers()
    var ret = tow.addTwoNumbers(nodel1, l2: nodel2)
    
    print(ret.desc())
    } while l1 != "exit"

    测试输入

    1->8

    0

    结果:1->8

    0

    7->3

    结果 7->3 

    3
    4->2
    结果:7 2

    6
    4->2
    结果:0 3

    3->4->5
    1->2->3
    结果:4->6->8

    9->4->5
    1->2->3
    结果:0->7->8

    3->8->5
    1->2->3
    结果:4->0->9

    3->4->7
    1->2->3
    结果:4->6->0->1

  • 相关阅读:
    python中单例模式
    python中常用的内置方法
    面向对象之反射
    绑定方法与非绑定方法
    python多态与抽象类
    python的组合与封装
    面向对象之继承与派生
    面向对象之类与对象
    python模块与包
    数据结构与算法_语言和框架特性前瞻和bug修复
  • 原文地址:https://www.cnblogs.com/guola/p/5150055.html
Copyright © 2011-2022 走看看